xmlui 0.10.14 → 0.10.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.
Files changed (52) hide show
  1. package/dist/lib/{index-779mp2Bm.mjs → index-axjeT2uJ.mjs} +719 -380
  2. package/dist/lib/{initMock-CAXdczCj.mjs → initMock-BoTWMs19.mjs} +1 -1
  3. package/dist/lib/language-server-web-worker.mjs +1 -1
  4. package/dist/lib/language-server.mjs +1 -1
  5. package/dist/lib/{metadata-utils-D90qqMGc.mjs → metadata-utils-CtY0QcvH.mjs} +2 -1
  6. package/dist/lib/{server-common-lmBDLpUh.mjs → server-common-Cine5nRR.mjs} +1 -1
  7. package/dist/lib/xmlui.d.ts +83 -5
  8. package/dist/lib/xmlui.mjs +72 -37
  9. package/dist/metadata/{collectedComponentMetadata-7DFXlw-J.mjs → collectedComponentMetadata-CQywuPDB.mjs} +671 -399
  10. package/dist/metadata/{initMock-AFWEftc6.mjs → initMock-Bi5kF5Af.mjs} +1 -1
  11. package/dist/metadata/xmlui-metadata.mjs +1 -1
  12. package/dist/metadata/xmlui-metadata.umd.js +3 -3
  13. package/dist/scripts/package.json +2 -3
  14. package/dist/scripts/src/components/AppState/AppState.js +32 -2
  15. package/dist/scripts/src/components/AppState/AppStateNative.js +27 -3
  16. package/dist/scripts/src/components/Button/Button.js +5 -1
  17. package/dist/scripts/src/components/Charts/PieChart/PieChartNative.js +41 -2
  18. package/dist/scripts/src/components/DropdownMenu/DropdownMenuNative.js +7 -9
  19. package/dist/scripts/src/components/FormItem/ItemWithLabel.js +3 -3
  20. package/dist/scripts/src/components/NavGroup/NavGroup.spec.js +182 -123
  21. package/dist/scripts/src/components/NavGroup/NavGroupNative.js +14 -6
  22. package/dist/scripts/src/components/NumberBox/NumberBox.spec.js +15 -9
  23. package/dist/scripts/src/components/SelectionStore/SelectionStoreNative.js +3 -1
  24. package/dist/scripts/src/components/Slider/SliderNative.js +2 -2
  25. package/dist/scripts/src/components/Table/Table.js +7 -1
  26. package/dist/scripts/src/components/Table/TableNative.js +4 -1
  27. package/dist/scripts/src/components/Table/useRowSelection.js +215 -1
  28. package/dist/scripts/src/components/TextBox/TextBox.js +1 -5
  29. package/dist/scripts/src/components/TextBox/TextBox.spec.js +368 -324
  30. package/dist/scripts/src/components/TextBox/TextBoxNative.js +10 -15
  31. package/dist/scripts/src/components/Theme/ThemeNative.js +2 -6
  32. package/dist/scripts/src/components/TimeInput/TimeInput.js +1 -5
  33. package/dist/scripts/src/components/TimeInput/TimeInputNative.js +2 -9
  34. package/dist/scripts/src/components-core/ApiBoundComponent.js +38 -24
  35. package/dist/scripts/src/components-core/RestApiProxy.js +0 -1
  36. package/dist/scripts/src/components-core/behaviors/BehaviorContext.js +54 -0
  37. package/dist/scripts/src/components-core/behaviors/CoreBehaviors.js +80 -0
  38. package/dist/scripts/src/components-core/descriptorHelper.js +1 -0
  39. package/dist/scripts/src/components-core/parts.js +4 -1
  40. package/dist/scripts/src/components-core/rendering/AppRoot.js +2 -1
  41. package/dist/scripts/src/components-core/rendering/ComponentAdapter.js +31 -46
  42. package/dist/scripts/src/components-core/rendering/nodeUtils.js +6 -0
  43. package/dist/scripts/src/components-core/theming/layout-resolver.js +2 -0
  44. package/dist/scripts/src/index.js +38 -1
  45. package/dist/scripts/src/testing/ComponentDrivers.js +1 -29
  46. package/dist/scripts/src/testing/drivers/NumberBoxDriver.js +44 -0
  47. package/dist/scripts/src/testing/drivers/SliderDriver.js +20 -0
  48. package/dist/scripts/src/testing/drivers/TextBoxDriver.js +20 -0
  49. package/dist/scripts/src/testing/fixtures.js +35 -9
  50. package/dist/standalone/xmlui-standalone.es.d.ts +154 -9
  51. package/dist/standalone/xmlui-standalone.umd.js +35 -35
  52. package/package.json +2 -3
@@ -9,7 +9,7 @@ import { useQuery, useInfiniteQuery, QueryClientProvider, QueryClient } from "@t
9
9
  import produce, { createDraft, finishDraft, enableMapSet } from "immer";
10
10
  import { throttle, get, isNil, omitBy, isUndefined, noop as noop$2, isPlainObject, isEqual, isEmpty, union, uniq, orderBy as orderBy$1, isObject, isArray, groupBy, sortBy, omit, isNumber, isString as isString$1, set, isNaN as isNaN$1, cloneDeep, merge, defaultTo, capitalize, unset, setWith, keyBy, pick } from "lodash-es";
11
11
  import { formatDistanceToNow, parse, format, parseISO, isValid, isToday, isYesterday, isTomorrow, isThisWeek, formatRelative, isThisYear, isSameDay, differenceInMinutes } from "date-fns";
12
- import { l as labelPositionMd, v as validationStatusMd, o as orientationOptionMd, b as alignmentOptionValues, i as isSizeType, L as LinkTargetMd, c as alignmentOptionMd, d as iconPositionMd, e as buttonTypesMd, s as sizeMd, f as buttonThemeMd, g as buttonVariantMd, h as layoutOptionKeys, T as TextVariantElement, V as VariantPropsKeys, j as variantOptionsMd, k as scrollAnchoringValues, m as buttonThemeNames, n as iconPositionNames, p as buttonVariantNames, t as triggerPositionNames, q as httpMethodNames, r as orientationOptionValues, u as viewportSizeNames, M as MetadataProvider } from "./metadata-utils-D90qqMGc.mjs";
12
+ import { l as labelPositionMd, o as orientationOptionMd, v as validationStatusMd, b as alignmentOptionValues, i as isSizeType, L as LinkTargetMd, c as alignmentOptionMd, d as iconPositionMd, e as buttonTypesMd, s as sizeMd, f as buttonThemeMd, g as buttonVariantMd, h as layoutOptionKeys, T as TextVariantElement, V as VariantPropsKeys, j as variantOptionsMd, k as scrollAnchoringValues, m as buttonThemeNames, n as iconPositionNames, p as buttonVariantNames, t as triggerPositionNames, q as httpMethodNames, r as orientationOptionValues, u as viewportSizeNames, M as MetadataProvider } from "./metadata-utils-CtY0QcvH.mjs";
13
13
  import classnames from "classnames";
14
14
  import Color from "color";
15
15
  import * as ReactDropdownMenu from "@radix-ui/react-dropdown-menu";
@@ -864,6 +864,7 @@ const defaultProps$1f = {
864
864
  const numberRegex = /^[0-9]+$/;
865
865
  const ItemWithLabel = forwardRef(function ItemWithLabel2({
866
866
  id,
867
+ testId,
867
868
  labelPosition = "top",
868
869
  style: style2 = {},
869
870
  className,
@@ -902,7 +903,7 @@ const ItemWithLabel = forwardRef(function ItemWithLabel2({
902
903
  }
903
904
  );
904
905
  }
905
- return /* @__PURE__ */ jsxs("div", { ...rest, ref, style: style2, className: classnames(className, styles$1k.itemWithLabel), children: [
906
+ return /* @__PURE__ */ jsxs("div", { ...rest, "data-testid": testId, ref, style: style2, className: classnames(className, styles$1k.itemWithLabel), children: [
906
907
  /* @__PURE__ */ jsxs(
907
908
  "div",
908
909
  {
@@ -946,7 +947,7 @@ const ItemWithLabel = forwardRef(function ItemWithLabel2({
946
947
  ]
947
948
  }
948
949
  ),
949
- /* @__PURE__ */ jsx(Slot, { "data-part-id": PART_LABELED_ITEM, id: !isInputTemplateUsed ? inputId : void 0, children })
950
+ /* @__PURE__ */ jsx(Slot, { "data-part-id": PART_LABELED_ITEM, id: !isInputTemplateUsed ? inputId : void 0, "data-testid": void 0, children })
950
951
  ]
951
952
  }
952
953
  ),
@@ -1057,6 +1058,11 @@ function dValidationStatus(value) {
1057
1058
  defaultValue: value ?? "none"
1058
1059
  };
1059
1060
  }
1061
+ function dValueApi() {
1062
+ return {
1063
+ description: `You can query this read-only API property to query the component's current value (\`true\`: checked, \`false\`: unchecked).`
1064
+ };
1065
+ }
1060
1066
  function dSetValueApi() {
1061
1067
  return {
1062
1068
  description: `You can use this method to set the component's current value programmatically (\`true\`: checked, \`false\`: unchecked).`
@@ -1111,11 +1117,41 @@ function dEndIcon() {
1111
1117
  valueType: "string"
1112
1118
  };
1113
1119
  }
1120
+ function dExpanded(comp) {
1121
+ return {
1122
+ description: `This property indicates if the ${comp} is expanded (\`true\`) or collapsed (\`false\`).`
1123
+ };
1124
+ }
1125
+ function dExpand(comp) {
1126
+ return {
1127
+ description: `This method expands the ${comp}.`
1128
+ };
1129
+ }
1130
+ function dCollapse(comp) {
1131
+ return {
1132
+ description: `This method collapses the ${comp}.`
1133
+ };
1134
+ }
1114
1135
  function dFocus(comp) {
1115
1136
  return {
1116
1137
  description: `This method sets the focus on the ${comp}.`
1117
1138
  };
1118
1139
  }
1140
+ function dValue() {
1141
+ return {
1142
+ description: `You can query the component's value. If no value is set, it will retrieve \`undefined\`.`
1143
+ };
1144
+ }
1145
+ function dDidOpen(comp) {
1146
+ return {
1147
+ description: `This event is triggered when the ${comp} has been displayed. The event handler has a single boolean argument set to \`true\`, indicating that the user opened the component.`
1148
+ };
1149
+ }
1150
+ function dDidClose(comp) {
1151
+ return {
1152
+ description: `This event is triggered when the ${comp} has been closed. The event handler has a single boolean argument set to \`true\`, indicating that the user closed the component.`
1153
+ };
1154
+ }
1119
1155
  function dTriggerTemplate(comp) {
1120
1156
  return {
1121
1157
  description: `This property allows you to define a custom trigger instead of the default one provided by \`${comp}\`.`,
@@ -3423,16 +3459,18 @@ const MenuItem = forwardRef(function MenuItem2({
3423
3459
  }
3424
3460
  );
3425
3461
  });
3426
- function SubMenuItem({ children, label: label2, triggerTemplate }) {
3427
- const { root: root2 } = useTheme();
3428
- return /* @__PURE__ */ jsxs(ReactDropdownMenu.Sub, { children: [
3429
- /* @__PURE__ */ jsx(ReactDropdownMenu.SubTrigger, { className: styles$1h.DropdownMenuSubTrigger, asChild: true, children: triggerTemplate ? triggerTemplate : /* @__PURE__ */ jsx("div", { children: label2 }) }),
3430
- /* @__PURE__ */ jsx(ReactDropdownMenu.Portal, { container: root2, children: /* @__PURE__ */ jsx(ReactDropdownMenu.SubContent, { className: styles$1h.DropdownMenuSubContent, children }) })
3431
- ] });
3432
- }
3433
- function MenuSeparator() {
3434
- return /* @__PURE__ */ jsx(ReactDropdownMenu.Separator, { className: styles$1h.DropdownMenuSeparator });
3435
- }
3462
+ const SubMenuItem = forwardRef(
3463
+ function SubMenuItem2({ children, label: label2, triggerTemplate }, ref) {
3464
+ const { root: root2 } = useTheme();
3465
+ return /* @__PURE__ */ jsxs(ReactDropdownMenu.Sub, { children: [
3466
+ /* @__PURE__ */ jsx(ReactDropdownMenu.SubTrigger, { className: styles$1h.DropdownMenuSubTrigger, asChild: true, ref, children: triggerTemplate ? triggerTemplate : /* @__PURE__ */ jsx("div", { children: label2 }) }),
3467
+ /* @__PURE__ */ jsx(ReactDropdownMenu.Portal, { container: root2, children: /* @__PURE__ */ jsx(ReactDropdownMenu.SubContent, { className: styles$1h.DropdownMenuSubContent, children }) })
3468
+ ] });
3469
+ }
3470
+ );
3471
+ const MenuSeparator = forwardRef(function MenuSeparator2(props, ref) {
3472
+ return /* @__PURE__ */ jsx(ReactDropdownMenu.Separator, { ref, className: styles$1h.DropdownMenuSeparator, ...props });
3473
+ });
3436
3474
  const ResponsiveBarDropdown = ({
3437
3475
  overflowIcon,
3438
3476
  children,
@@ -5487,7 +5525,7 @@ const NavGroup = forwardRef(function NavGroup2({
5487
5525
  layoutIsVertical,
5488
5526
  iconHorizontalCollapsed: iconHorizontalCollapsed ?? defaultProps$16.iconHorizontalCollapsed,
5489
5527
  iconHorizontalExpanded: iconHorizontalExpanded ?? defaultProps$16.iconHorizontalExpanded,
5490
- iconVerticalCollapsed: iconVerticalCollapsed ?? defaultProps$16.iconVerticalCollapsed,
5528
+ iconVerticalCollapsed: iconVerticalCollapsed ?? (level < 0 && !inline ? defaultProps$16.iconVerticalExpanded : defaultProps$16.iconVerticalCollapsed),
5491
5529
  iconVerticalExpanded: iconVerticalExpanded ?? defaultProps$16.iconVerticalExpanded
5492
5530
  };
5493
5531
  }, [
@@ -5496,7 +5534,8 @@ const NavGroup = forwardRef(function NavGroup2({
5496
5534
  iconVerticalCollapsed,
5497
5535
  iconVerticalExpanded,
5498
5536
  level,
5499
- layoutIsVertical
5537
+ layoutIsVertical,
5538
+ inline
5500
5539
  ]);
5501
5540
  return /* @__PURE__ */ jsx(NavGroupContext.Provider, { value: navGroupContextValue, children: inline ? /* @__PURE__ */ jsx(
5502
5541
  ExpandableNavGroup,
@@ -5522,6 +5561,7 @@ const NavGroup = forwardRef(function NavGroup2({
5522
5561
  renderChild: renderChild2,
5523
5562
  ref,
5524
5563
  to,
5564
+ initiallyExpanded,
5525
5565
  disabled: disabled2
5526
5566
  }
5527
5567
  ) });
@@ -5572,7 +5612,6 @@ const ExpandableNavGroup = forwardRef(function ExpandableNavGroup2({
5572
5612
  /* @__PURE__ */ jsx(
5573
5613
  "div",
5574
5614
  {
5575
- "data-testid": "nav-group-content",
5576
5615
  "aria-hidden": !expanded2,
5577
5616
  className: classnames(styles$18.groupContent, {
5578
5617
  [styles$18.expanded]: expanded2
@@ -5589,6 +5628,7 @@ const DropDownNavGroup = forwardRef(function DropDownNavGroup2({
5589
5628
  node,
5590
5629
  to,
5591
5630
  disabled: disabled2 = false,
5631
+ initiallyExpanded = false,
5592
5632
  ...rest
5593
5633
  }, ref) {
5594
5634
  const {
@@ -5607,56 +5647,68 @@ const DropDownNavGroup = forwardRef(function DropDownNavGroup2({
5607
5647
  Trigger2 = DropdownMenuSubTrigger$1;
5608
5648
  Content2 = DropdownMenuSubContent$1;
5609
5649
  }
5610
- const [expanded2, setExpanded] = useState(false);
5611
- return /* @__PURE__ */ jsxs(Wrapper, { ...rest, onOpenChange: (open) => setExpanded(open), children: [
5612
- /* @__PURE__ */ jsx(Trigger2, { asChild: true, disabled: disabled2, children: /* @__PURE__ */ jsxs(
5613
- NavLink,
5614
- {
5615
- icon: icon2,
5616
- style: { flexShrink: 0 },
5617
- vertical: level >= 1,
5618
- to,
5619
- disabled: disabled2,
5620
- children: [
5621
- label2,
5622
- /* @__PURE__ */ jsx("div", { style: { flex: 1 } }),
5623
- level === 0 && /* @__PURE__ */ jsx(Icon, { name: iconVerticalExpanded }),
5624
- level >= 1 && /* @__PURE__ */ jsx(Icon, { name: expanded2 ? iconHorizontalExpanded : iconHorizontalCollapsed })
5625
- ]
5626
- }
5627
- ) }),
5628
- /* @__PURE__ */ jsx(DropdownMenuPortal, { container: root2, children: /* @__PURE__ */ jsx(
5629
- Content2,
5630
- {
5631
- className: styles$18.dropdownList,
5632
- style: { display: "flex", flexDirection: "column" },
5633
- side: "bottom",
5634
- align: "start",
5635
- children: renderChild2(node.children, {
5636
- wrapChild: ({ node: node2 }, renderedChild, hints) => {
5637
- if (hints == null ? void 0 : hints.opaque) {
5638
- return renderedChild;
5639
- }
5640
- if (node2.type === "List") {
5641
- return renderedChild;
5642
- }
5643
- if (node2.type === "NavGroup") {
5644
- return renderedChild;
5645
- }
5646
- let child = renderedChild;
5647
- if (node2.type === "NavLink") {
5648
- child = cloneElement(renderedChild, {
5649
- ...mergeProps(renderedChild.props, {
5650
- vertical: true
5651
- })
5652
- });
5653
- }
5654
- return /* @__PURE__ */ jsx(DropdownMenuItem$1, { asChild: true, children: child });
5650
+ const [expanded2, setExpanded] = useState(initiallyExpanded);
5651
+ const [renderCount, setRenderCount] = useState(false);
5652
+ useEffect(() => setRenderCount(true), []);
5653
+ return /* @__PURE__ */ jsxs(
5654
+ Wrapper,
5655
+ {
5656
+ ...rest,
5657
+ open: expanded2,
5658
+ onOpenChange: (open) => {
5659
+ if (renderCount) setExpanded(open);
5660
+ },
5661
+ children: [
5662
+ /* @__PURE__ */ jsx(Trigger2, { asChild: true, disabled: disabled2, children: /* @__PURE__ */ jsxs(
5663
+ NavLink,
5664
+ {
5665
+ icon: icon2,
5666
+ style: { flexShrink: 0 },
5667
+ vertical: level >= 1,
5668
+ to,
5669
+ disabled: disabled2,
5670
+ children: [
5671
+ label2,
5672
+ /* @__PURE__ */ jsx("div", { style: { flex: 1 } }),
5673
+ level === 0 && /* @__PURE__ */ jsx(Icon, { name: expanded2 ? iconVerticalExpanded : iconVerticalCollapsed }),
5674
+ level >= 1 && /* @__PURE__ */ jsx(Icon, { name: expanded2 ? iconHorizontalExpanded : iconHorizontalCollapsed })
5675
+ ]
5655
5676
  }
5656
- })
5657
- }
5658
- ) })
5659
- ] });
5677
+ ) }),
5678
+ /* @__PURE__ */ jsx(DropdownMenuPortal, { container: root2, children: /* @__PURE__ */ jsx(
5679
+ Content2,
5680
+ {
5681
+ className: styles$18.dropdownList,
5682
+ style: { display: "flex", flexDirection: "column" },
5683
+ side: "bottom",
5684
+ align: "start",
5685
+ children: renderChild2(node.children, {
5686
+ wrapChild: ({ node: node2 }, renderedChild, hints) => {
5687
+ if (hints == null ? void 0 : hints.opaque) {
5688
+ return renderedChild;
5689
+ }
5690
+ if (node2.type === "List") {
5691
+ return renderedChild;
5692
+ }
5693
+ if (node2.type === "NavGroup") {
5694
+ return renderedChild;
5695
+ }
5696
+ let child = renderedChild;
5697
+ if (node2.type === "NavLink") {
5698
+ child = cloneElement(renderedChild, {
5699
+ ...mergeProps(renderedChild.props, {
5700
+ vertical: true
5701
+ })
5702
+ });
5703
+ }
5704
+ return /* @__PURE__ */ jsx(DropdownMenuItem$1, { asChild: true, children: child });
5705
+ }
5706
+ })
5707
+ }
5708
+ ) })
5709
+ ]
5710
+ }
5711
+ );
5660
5712
  });
5661
5713
  const NavGroupContext = createContext({
5662
5714
  level: -1,
@@ -6421,6 +6473,9 @@ const treeDisplayComponentRenderer = createComponentRenderer(
6421
6473
  );
6422
6474
  }
6423
6475
  );
6476
+ function hasRenderableChildren(children) {
6477
+ return !!(children == null ? void 0 : children.some((child) => (child == null ? void 0 : child.type) !== "Slot"));
6478
+ }
6424
6479
  const COMP$1o = "Button";
6425
6480
  const ButtonMd = createMetadata({
6426
6481
  status: "stable",
@@ -6558,6 +6613,7 @@ const buttonComponentRenderer = createComponentRenderer(
6558
6613
  ({ node, extractValue, renderChild: renderChild2, lookupEventHandler, className }) => {
6559
6614
  const iconName = extractValue.asString(node.props.icon);
6560
6615
  const label2 = extractValue.asDisplayText(node.props.label);
6616
+ const renderedChildren = hasRenderableChildren(node.children) ? renderChild2(node.children, { type: "Stack", orientation: "horizontal" }) : label2;
6561
6617
  return /* @__PURE__ */ jsx(
6562
6618
  Button,
6563
6619
  {
@@ -6576,7 +6632,7 @@ const buttonComponentRenderer = createComponentRenderer(
6576
6632
  onBlur: lookupEventHandler("lostFocus"),
6577
6633
  className,
6578
6634
  contextualLabel: extractValue.asOptionalString(node.props.contextualLabel),
6579
- children: renderChild2(node.children, { type: "Stack", orientation: "horizontal" }) || label2
6635
+ children: renderedChildren
6580
6636
  }
6581
6637
  );
6582
6638
  }
@@ -9601,10 +9657,12 @@ const SelectionStore = ({
9601
9657
  }) => {
9602
9658
  const [items, setItems] = useState(selectedItems);
9603
9659
  const valueInitializedRef = useRef(false);
9660
+ const currentItemsRef = useRef(selectedItems);
9604
9661
  const refreshSelection = useEvent((allItems = EMPTY_ARRAY) => {
9605
9662
  const safeAllItems = allItems || EMPTY_ARRAY;
9606
9663
  const safeSelectedItems = selectedItems || EMPTY_ARRAY;
9607
9664
  setItems(safeAllItems);
9665
+ currentItemsRef.current = safeAllItems;
9608
9666
  let value = safeAllItems.filter(
9609
9667
  (item2) => !!safeSelectedItems.find((si) => si && item2 && si[idKey] === item2[idKey])
9610
9668
  );
@@ -9616,7 +9674,7 @@ const SelectionStore = ({
9616
9674
  }
9617
9675
  });
9618
9676
  const setSelectedRowIds = useEvent((rowIds) => {
9619
- const safeItems = items || EMPTY_ARRAY;
9677
+ const safeItems = currentItemsRef.current || EMPTY_ARRAY;
9620
9678
  updateState({ value: safeItems.filter((item2) => rowIds.includes(item2[idKey])) });
9621
9679
  });
9622
9680
  const clearSelection = useEvent(() => {
@@ -9868,6 +9926,7 @@ function resolveLayoutProps(layoutProps = EMPTY_OBJECT, layoutContext) {
9868
9926
  collectCss("zoom");
9869
9927
  collectCss("cursor");
9870
9928
  collectCss("whiteSpace");
9929
+ collectCss("transform");
9871
9930
  collectCss("outline");
9872
9931
  collectCss("outlineWidth");
9873
9932
  collectCss("outlineColor");
@@ -10074,6 +10133,7 @@ const layoutPatterns = {
10074
10133
  textDecorationStyle: [],
10075
10134
  textDecorationThickness: [],
10076
10135
  textUnderlineOffset: [],
10136
+ transform: [],
10077
10137
  // --- Outline
10078
10138
  outline: [],
10079
10139
  outlineWidth: [],
@@ -10969,17 +11029,127 @@ function useRowSelection({
10969
11029
  rowsSelectable,
10970
11030
  enableMultiRowSelection,
10971
11031
  rowDisabledPredicate,
10972
- onSelectionDidChange
11032
+ onSelectionDidChange,
11033
+ initiallySelected = EMPTY_ARRAY,
11034
+ syncWithAppState
10973
11035
  }) {
11036
+ var _a2;
10974
11037
  const [focusedIndex, setFocusedIndex] = useState(-1);
10975
11038
  const [selectionInterval, setSelectionInterval] = useState(null);
10976
11039
  const { selectedItems, setSelectedRowIds, refreshSelection, idKey } = useSelectionContext();
10977
11040
  const walkableList = useMemo(() => {
10978
11041
  return visibleItems2.map((item2) => item2[idKey]);
10979
11042
  }, [idKey, visibleItems2]);
11043
+ const [initialSelectionApplied, setInitialSelectionApplied] = useState(false);
10980
11044
  useEffect(() => {
10981
11045
  refreshSelection(rowsSelectable ? items : EMPTY_ARRAY);
10982
11046
  }, [refreshSelection, items, rowsSelectable]);
11047
+ const appStateSelection = (_a2 = syncWithAppState == null ? void 0 : syncWithAppState.value) == null ? void 0 : _a2.selectedIds;
11048
+ const prevAppStateSelection = usePrevious(appStateSelection);
11049
+ const [syncState, setSyncState] = useState("idle");
11050
+ const lastAppStateSelectionRef = useRef();
11051
+ const lastTableSelectionRef = useRef();
11052
+ const lastUpdateSourceRef = useRef(null);
11053
+ useEffect(() => {
11054
+ if (!rowsSelectable || !syncWithAppState || !appStateSelection || syncState === "updating_to_appstate") {
11055
+ return;
11056
+ }
11057
+ const appStateChanged = appStateSelection !== prevAppStateSelection;
11058
+ const isDifferentFromLastKnown = JSON.stringify([...appStateSelection || []].sort()) !== JSON.stringify([...lastAppStateSelectionRef.current || []].sort());
11059
+ const wasNotOurUpdate = lastUpdateSourceRef.current !== "table";
11060
+ if (appStateChanged && isDifferentFromLastKnown && wasNotOurUpdate && items.length > 0) {
11061
+ setSyncState("updating_from_appstate");
11062
+ const validIds = appStateSelection.filter(
11063
+ (id) => items.some((item2) => item2[idKey] === id)
11064
+ );
11065
+ const idsToSelect = enableMultiRowSelection ? validIds : validIds.slice(0, 1);
11066
+ lastAppStateSelectionRef.current = [...appStateSelection];
11067
+ lastTableSelectionRef.current = [...idsToSelect];
11068
+ lastUpdateSourceRef.current = "appstate";
11069
+ setSelectedRowIds(idsToSelect);
11070
+ setInitialSelectionApplied(true);
11071
+ }
11072
+ }, [
11073
+ appStateSelection,
11074
+ prevAppStateSelection,
11075
+ items,
11076
+ rowsSelectable,
11077
+ syncWithAppState,
11078
+ idKey,
11079
+ enableMultiRowSelection,
11080
+ setSelectedRowIds,
11081
+ syncState
11082
+ ]);
11083
+ useEffect(() => {
11084
+ var _a3;
11085
+ if (!rowsSelectable || !syncWithAppState || syncState === "updating_from_appstate") {
11086
+ return;
11087
+ }
11088
+ const currentSelectionIds = selectedItems.map((item2) => item2[idKey]);
11089
+ const appStateSelectionIds = appStateSelection || [];
11090
+ const tableChanged = JSON.stringify([...currentSelectionIds].sort()) !== JSON.stringify([...lastTableSelectionRef.current || []].sort());
11091
+ const isDifferentFromAppState = JSON.stringify([...currentSelectionIds].sort()) !== JSON.stringify([...appStateSelectionIds].sort());
11092
+ const wasNotAppStateUpdate = lastUpdateSourceRef.current !== "appstate";
11093
+ if (tableChanged && isDifferentFromAppState && wasNotAppStateUpdate) {
11094
+ setSyncState("updating_to_appstate");
11095
+ lastTableSelectionRef.current = [...currentSelectionIds];
11096
+ lastAppStateSelectionRef.current = [...currentSelectionIds];
11097
+ lastUpdateSourceRef.current = "table";
11098
+ (_a3 = syncWithAppState.update) == null ? void 0 : _a3.call(syncWithAppState, { selectedIds: currentSelectionIds });
11099
+ }
11100
+ }, [
11101
+ selectedItems,
11102
+ syncWithAppState,
11103
+ appStateSelection,
11104
+ idKey,
11105
+ rowsSelectable,
11106
+ syncState
11107
+ ]);
11108
+ useEffect(() => {
11109
+ if (syncState !== "idle") {
11110
+ const resetTimer = requestAnimationFrame(() => {
11111
+ setSyncState("idle");
11112
+ });
11113
+ return () => cancelAnimationFrame(resetTimer);
11114
+ }
11115
+ }, [syncState, appStateSelection, selectedItems]);
11116
+ useEffect(() => {
11117
+ if (syncState === "idle") {
11118
+ const clearTimer = requestAnimationFrame(() => {
11119
+ lastUpdateSourceRef.current = null;
11120
+ });
11121
+ return () => cancelAnimationFrame(clearTimer);
11122
+ }
11123
+ }, [syncState]);
11124
+ useEffect(() => {
11125
+ if (syncWithAppState) {
11126
+ return;
11127
+ }
11128
+ if (!rowsSelectable || !initiallySelected || initiallySelected.length === 0 || initialSelectionApplied) {
11129
+ return;
11130
+ }
11131
+ if (items.length > 0) {
11132
+ const frameId = requestAnimationFrame(() => {
11133
+ const validIds = initiallySelected.filter((id) => items.some((item2) => item2[idKey] === id));
11134
+ if (validIds.length > 0) {
11135
+ const idsToSelect = enableMultiRowSelection ? validIds : [validIds[0]];
11136
+ setSelectedRowIds(idsToSelect);
11137
+ setInitialSelectionApplied(true);
11138
+ }
11139
+ });
11140
+ return () => cancelAnimationFrame(frameId);
11141
+ }
11142
+ }, [
11143
+ items,
11144
+ initiallySelected,
11145
+ rowsSelectable,
11146
+ idKey,
11147
+ enableMultiRowSelection,
11148
+ setSelectedRowIds,
11149
+ initialSelectionApplied,
11150
+ selectedItems,
11151
+ syncWithAppState
11152
+ ]);
10983
11153
  const prevEnableMultiRowSelection = usePrevious(enableMultiRowSelection);
10984
11154
  useEffect(() => {
10985
11155
  if (prevEnableMultiRowSelection && !enableMultiRowSelection) {
@@ -11611,6 +11781,8 @@ const Table = forwardRef(
11611
11781
  headerHeight,
11612
11782
  rowsSelectable = defaultProps$Z.rowsSelectable,
11613
11783
  enableMultiRowSelection = defaultProps$Z.enableMultiRowSelection,
11784
+ initiallySelected = defaultProps$Z.initiallySelected,
11785
+ syncWithAppState,
11614
11786
  pageSizeOptions = defaultProps$Z.pageSizeOptions,
11615
11787
  pageSize = (pageSizeOptions == null ? void 0 : pageSizeOptions[0]) || DEFAULT_PAGE_SIZES[0],
11616
11788
  currentPageIndex = 0,
@@ -11679,7 +11851,9 @@ const Table = forwardRef(
11679
11851
  rowsSelectable,
11680
11852
  enableMultiRowSelection,
11681
11853
  rowDisabledPredicate,
11682
- onSelectionDidChange
11854
+ onSelectionDidChange,
11855
+ initiallySelected,
11856
+ syncWithAppState
11683
11857
  });
11684
11858
  const dataWithOrder = useMemo(() => {
11685
11859
  return safeData.map((item2, index) => {
@@ -12180,6 +12354,7 @@ const defaultProps$Z = {
12180
12354
  loading: false,
12181
12355
  rowsSelectable: false,
12182
12356
  enableMultiRowSelection: true,
12357
+ initiallySelected: EMPTY_ARRAY,
12183
12358
  pageSizeOptions: [5, 10, 15],
12184
12359
  sortingDirection: "ascending",
12185
12360
  autoFocus: false,
@@ -12217,6 +12392,12 @@ const TableMd = createMetadata({
12217
12392
  ),
12218
12393
  headerHeight: d(`This optional property is used to specify the height of the table header.`),
12219
12394
  rowsSelectable: d(`Indicates whether the rows are selectable (\`true\`) or not (\`false\`).`),
12395
+ initiallySelected: d(
12396
+ `An array of IDs that should be initially selected when the table is rendered. This property only has an effect when the rowsSelectable property is set to \`true\`.`
12397
+ ),
12398
+ syncWithAppState: d(
12399
+ `An AppState instance to synchronize the table's selection state with. The table will read from and write to the 'selectedIds' property of the AppState object. When provided, this takes precedence over the initiallySelected property for initial selection. You can use the AppState's didUpdate event to receive notifications when the selection changes.`
12400
+ ),
12220
12401
  pageSize: d(
12221
12402
  `This property defines the number of rows to display per page when pagination is enabled.`
12222
12403
  ),
@@ -12498,7 +12679,9 @@ const TableWithColumns = memo(forwardRef(
12498
12679
  pageInfoPosition: extractValue.asOptionalString(node.props.pageInfoPosition),
12499
12680
  showCurrentPage: extractValue.asOptionalBoolean(node.props.showCurrentPage),
12500
12681
  showPageInfo: extractValue.asOptionalBoolean(node.props.showPageInfo),
12501
- showPageSizeSelector: extractValue.asOptionalBoolean(node.props.showPageSizeSelector)
12682
+ showPageSizeSelector: extractValue.asOptionalBoolean(node.props.showPageSizeSelector),
12683
+ initiallySelected: extractValue(node.props.initiallySelected),
12684
+ syncWithAppState: extractValue(node.props.syncWithAppState)
12502
12685
  }
12503
12686
  )
12504
12687
  ] });
@@ -17478,18 +17661,12 @@ const TextBox = forwardRef(function TextBox2({
17478
17661
  autoFocus,
17479
17662
  readOnly: readOnly2,
17480
17663
  tabIndex,
17481
- label: label2,
17482
- labelPosition,
17483
- labelWidth,
17484
- labelBreak: labelBreak2,
17485
17664
  required: required2,
17486
17665
  showPasswordToggle,
17487
17666
  passwordVisibleIcon = defaultProps$I.passwordVisibleIcon,
17488
17667
  passwordHiddenIcon = defaultProps$I.passwordHiddenIcon,
17489
17668
  ...rest
17490
17669
  }, ref) {
17491
- const _id = useId();
17492
- id = id || _id;
17493
17670
  const inputRef = useRef(null);
17494
17671
  const [showPassword, setShowPassword] = useState(false);
17495
17672
  const actualType = type === "password" && showPassword ? "text" : type;
@@ -17544,88 +17721,73 @@ const TextBox = forwardRef(function TextBox2({
17544
17721
  setValue
17545
17722
  });
17546
17723
  }, [focus, registerComponentApi, setValue]);
17547
- return /* @__PURE__ */ jsx(
17548
- ItemWithLabel,
17724
+ return /* @__PURE__ */ jsxs(
17725
+ "div",
17549
17726
  {
17550
17727
  ...rest,
17551
- id,
17552
- labelPosition,
17553
- label: label2,
17554
- labelWidth,
17555
- labelBreak: labelBreak2,
17556
- required: required2,
17557
- enabled: enabled2,
17558
- style: style2,
17559
- className,
17560
17728
  ref,
17561
- isInputTemplateUsed: true,
17562
- children: /* @__PURE__ */ jsxs(
17563
- "div",
17564
- {
17565
- className: classnames(styles$N.inputRoot, {
17566
- [styles$N.disabled]: !enabled2,
17567
- [styles$N.readOnly]: readOnly2,
17568
- [styles$N.error]: validationStatus === "error",
17569
- [styles$N.warning]: validationStatus === "warning",
17570
- [styles$N.valid]: validationStatus === "valid"
17571
- }),
17572
- tabIndex: -1,
17573
- onFocus: focus,
17574
- style: { gap },
17575
- children: [
17576
- /* @__PURE__ */ jsx(
17577
- Adornment,
17578
- {
17579
- "data-part-id": PART_START_ADORNMENT,
17580
- text: startText,
17581
- iconName: startIcon,
17582
- className: classnames(styles$N.adornment)
17583
- }
17584
- ),
17585
- /* @__PURE__ */ jsx(
17586
- "input",
17587
- {
17588
- id,
17589
- "data-part-id": PART_INPUT,
17590
- type: actualType,
17591
- className: classnames(styles$N.input, {
17592
- [styles$N.readOnly]: readOnly2
17593
- }),
17594
- disabled: !enabled2,
17595
- value: localValue,
17596
- maxLength,
17597
- placeholder: placeholder2,
17598
- onChange: onInputChange,
17599
- onFocus: handleOnFocus,
17600
- onBlur: handleOnBlur,
17601
- onKeyDown,
17602
- ref: inputRef,
17603
- readOnly: readOnly2,
17604
- autoFocus,
17605
- tabIndex: enabled2 ? tabIndex : -1,
17606
- required: required2
17607
- }
17608
- ),
17609
- type === "password" && showPasswordToggle ? /* @__PURE__ */ jsx(
17610
- Adornment,
17611
- {
17612
- "data-part-id": PART_END_ADORNMENT,
17613
- iconName: showPassword ? passwordVisibleIcon : passwordHiddenIcon,
17614
- className: classnames(styles$N.adornment, styles$N.passwordToggle),
17615
- onClick: togglePasswordVisibility
17616
- }
17617
- ) : /* @__PURE__ */ jsx(
17618
- Adornment,
17619
- {
17620
- "data-part-id": PART_END_ADORNMENT,
17621
- text: endText,
17622
- iconName: endIcon,
17623
- className: styles$N.adornment
17624
- }
17625
- )
17626
- ]
17627
- }
17628
- )
17729
+ className: classnames(styles$N.inputRoot, {
17730
+ [styles$N.disabled]: !enabled2,
17731
+ [styles$N.readOnly]: readOnly2,
17732
+ [styles$N.error]: validationStatus === "error",
17733
+ [styles$N.warning]: validationStatus === "warning",
17734
+ [styles$N.valid]: validationStatus === "valid"
17735
+ }),
17736
+ tabIndex: -1,
17737
+ onFocus: focus,
17738
+ style: { gap },
17739
+ children: [
17740
+ /* @__PURE__ */ jsx(
17741
+ Adornment,
17742
+ {
17743
+ "data-part-id": PART_START_ADORNMENT,
17744
+ text: startText,
17745
+ iconName: startIcon,
17746
+ className: classnames(styles$N.adornment)
17747
+ }
17748
+ ),
17749
+ /* @__PURE__ */ jsx(
17750
+ "input",
17751
+ {
17752
+ id,
17753
+ ref: inputRef,
17754
+ "data-part-id": PART_INPUT,
17755
+ type: actualType,
17756
+ className: classnames(styles$N.input, {
17757
+ [styles$N.readOnly]: readOnly2
17758
+ }),
17759
+ disabled: !enabled2,
17760
+ value: localValue,
17761
+ maxLength,
17762
+ placeholder: placeholder2,
17763
+ onChange: onInputChange,
17764
+ onFocus: handleOnFocus,
17765
+ onBlur: handleOnBlur,
17766
+ onKeyDown,
17767
+ readOnly: readOnly2,
17768
+ autoFocus,
17769
+ tabIndex: enabled2 ? tabIndex : -1,
17770
+ required: required2
17771
+ }
17772
+ ),
17773
+ type === "password" && showPasswordToggle ? /* @__PURE__ */ jsx(
17774
+ Adornment,
17775
+ {
17776
+ "data-part-id": PART_END_ADORNMENT,
17777
+ iconName: showPassword ? passwordVisibleIcon : passwordHiddenIcon,
17778
+ className: classnames(styles$N.adornment, styles$N.passwordToggle),
17779
+ onClick: togglePasswordVisibility
17780
+ }
17781
+ ) : /* @__PURE__ */ jsx(
17782
+ Adornment,
17783
+ {
17784
+ "data-part-id": PART_END_ADORNMENT,
17785
+ text: endText,
17786
+ iconName: endIcon,
17787
+ className: styles$N.adornment
17788
+ }
17789
+ )
17790
+ ]
17629
17791
  }
17630
17792
  );
17631
17793
  });
@@ -22094,7 +22256,7 @@ function ApiInterceptorProvider({
22094
22256
  return;
22095
22257
  }
22096
22258
  (async () => {
22097
- const { initMock } = await import("./initMock-CAXdczCj.mjs");
22259
+ const { initMock } = await import("./initMock-BoTWMs19.mjs");
22098
22260
  const apiInstance2 = await initMock(interceptor);
22099
22261
  setApiInstance(apiInstance2);
22100
22262
  setInitialized(true);
@@ -22111,7 +22273,7 @@ function ApiInterceptorProvider({
22111
22273
  if (process.env.VITE_MOCK_ENABLED) {
22112
22274
  const [{ createApiInterceptorWorker }, { initMock }] = await Promise.all([
22113
22275
  useWorker ? import("./apiInterceptorWorker-DPgtUtdA.mjs") : Promise.resolve({ createApiInterceptorWorker: () => null }),
22114
- import("./initMock-CAXdczCj.mjs")
22276
+ import("./initMock-BoTWMs19.mjs")
22115
22277
  ]);
22116
22278
  if (interceptor || forceInitialize) {
22117
22279
  const apiInstance2 = await initMock(interceptor || {});
@@ -22148,7 +22310,7 @@ function ApiInterceptorProvider({
22148
22310
  (async () => {
22149
22311
  const [{ createApiInterceptorWorker }, { initMock }] = await Promise.all([
22150
22312
  import("./apiInterceptorWorker-DPgtUtdA.mjs"),
22151
- import("./initMock-CAXdczCj.mjs")
22313
+ import("./initMock-BoTWMs19.mjs")
22152
22314
  ]);
22153
22315
  const apiInstance2 = await initMock(interceptor);
22154
22316
  await createApiInterceptorWorker(apiInstance2, parentInterceptorWorker);
@@ -24408,15 +24570,15 @@ const Slider = forwardRef(
24408
24570
  children: /* @__PURE__ */ jsx(
24409
24571
  Thumb,
24410
24572
  {
24573
+ id,
24574
+ "aria-required": required2,
24411
24575
  ref: index === 0 ? thumbRef : null,
24412
24576
  className: classnames(styles$D.sliderThumb, {
24413
24577
  [styles$D.disabled]: !enabled2
24414
24578
  }),
24415
24579
  style: thumbStyle ? { ...thumbStyle } : void 0,
24416
- id,
24417
24580
  "data-thumb-index": index,
24418
- autoFocus,
24419
- "aria-required": required2
24581
+ autoFocus
24420
24582
  }
24421
24583
  )
24422
24584
  },
@@ -25351,10 +25513,6 @@ const TextBoxMd = createMetadata({
25351
25513
  ...dInitialValue(),
25352
25514
  defaultValue: defaultProps$I.initialValue
25353
25515
  },
25354
- label: dLabel(),
25355
- labelPosition: dLabelPosition("top"),
25356
- labelWidth: dLabelWidth(COMP$Y),
25357
- labelBreak: dLabelBreak(COMP$Y),
25358
25516
  maxLength: dMaxLength(),
25359
25517
  autoFocus: dAutoFocus(),
25360
25518
  required: dRequired(),
@@ -25467,10 +25625,6 @@ function renderTextBox(className, state, updateState, extractValue, node, lookup
25467
25625
  gap: extractValue.asOptionalString(node.props.gap),
25468
25626
  autoFocus: extractValue.asOptionalBoolean(node.props.autoFocus),
25469
25627
  readOnly: extractValue.asOptionalBoolean(node.props.readOnly),
25470
- label: extractValue.asOptionalString(node.props.label),
25471
- labelPosition: extractValue(node.props.labelPosition),
25472
- labelWidth: extractValue.asOptionalString(node.props.labelWidth),
25473
- labelBreak: extractValue.asOptionalBoolean(node.props.labelBreak),
25474
25628
  required: extractValue.asOptionalBoolean(node.props.required),
25475
25629
  showPasswordToggle: extractValue.asOptionalBoolean(node.props.showPasswordToggle, false),
25476
25630
  passwordVisibleIcon: extractValue.asOptionalString(node.props.passwordVisibleIcon),
@@ -25572,7 +25726,6 @@ function shouldReturnAsArrayBuffer(contentType) {
25572
25726
  "application/x-tar",
25573
25727
  "application/gzip",
25574
25728
  "application/x-7z-compressed",
25575
- "application/octet-stream",
25576
25729
  "application/x-binary"
25577
25730
  ];
25578
25731
  return arrayBufferTypes.some((type) => contentType.toLowerCase().includes(type.toLowerCase()));
@@ -30288,24 +30441,24 @@ function Theme({
30288
30441
  }
30289
30442
  if (isRoot) {
30290
30443
  const faviconUrl = getResourceUrl("resource:favicon") || "/resources/favicon.ico";
30291
- return (
30292
- // <ThemeContext.Provider value={currentThemeContextValue}>
30293
- /* @__PURE__ */ jsxs(Fragment, { children: [
30294
- /* @__PURE__ */ jsxs(Helmet, { children: [
30295
- /* @__PURE__ */ jsx("link", { rel: "icon", type: "image/svg+xml", href: faviconUrl }),
30296
- fontLinks == null ? void 0 : fontLinks.map((fontLink) => /* @__PURE__ */ jsx("link", { href: fontLink, rel: "stylesheet" }, fontLink))
30297
- ] }),
30298
- /* @__PURE__ */ jsx(RootClasses, { classNames: rootClasses }),
30299
- /* @__PURE__ */ jsxs(ErrorBoundary, { node, location: "theme-root", children: [
30300
- renderChild2(node.children),
30301
- children
30302
- ] }),
30303
- /* @__PURE__ */ jsx(NotificationToast, { toastDuration })
30304
- ] })
30305
- );
30444
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
30445
+ /* @__PURE__ */ jsxs(Helmet, { children: [
30446
+ /* @__PURE__ */ jsx("link", { rel: "icon", type: "image/svg+xml", href: faviconUrl }),
30447
+ fontLinks == null ? void 0 : fontLinks.map((fontLink) => /* @__PURE__ */ jsx("link", { href: fontLink, rel: "stylesheet" }, fontLink))
30448
+ ] }),
30449
+ /* @__PURE__ */ jsx(RootClasses, { classNames: rootClasses }),
30450
+ /* @__PURE__ */ jsxs(ErrorBoundary, { node, location: "theme-root", children: [
30451
+ renderChild2 && renderChild2(node.children),
30452
+ children
30453
+ ] }),
30454
+ /* @__PURE__ */ jsx(NotificationToast, { toastDuration })
30455
+ ] });
30306
30456
  }
30307
30457
  return /* @__PURE__ */ jsxs(ThemeContext.Provider, { value: currentThemeContextValue, children: [
30308
- /* @__PURE__ */ jsx("div", { className: classnames(styles$p.wrapper, className), children: renderChild2(node.children, { ...layoutContext, themeClassName: className }) }),
30458
+ /* @__PURE__ */ jsxs("div", { className: classnames(styles$p.wrapper, className), children: [
30459
+ renderChild2 && renderChild2(node.children, { ...layoutContext, themeClassName: className }),
30460
+ children
30461
+ ] }),
30309
30462
  root2 && createPortal(
30310
30463
  /* @__PURE__ */ jsx(
30311
30464
  "div",
@@ -33694,10 +33847,8 @@ const defaultProps$k = {
33694
33847
  clearable: false,
33695
33848
  clearToInitialValue: true,
33696
33849
  required: false,
33697
- labelPosition: "top",
33698
33850
  readOnly: false,
33699
33851
  autoFocus: false,
33700
- labelBreak: false,
33701
33852
  emptyCharacter: "-"
33702
33853
  };
33703
33854
  const TimeInputNative = forwardRef(function TimeInputNative2({
@@ -33727,10 +33878,6 @@ const TimeInputNative = forwardRef(function TimeInputNative2({
33727
33878
  endText,
33728
33879
  endIcon,
33729
33880
  gap,
33730
- label: label2,
33731
- labelPosition = defaultProps$k.labelPosition,
33732
- labelWidth,
33733
- labelBreak: labelBreak2 = defaultProps$k.labelBreak,
33734
33881
  readOnly: readOnly2 = defaultProps$k.readOnly,
33735
33882
  autoFocus = defaultProps$k.autoFocus,
33736
33883
  emptyCharacter = defaultProps$k.emptyCharacter,
@@ -34158,6 +34305,7 @@ const TimeInputNative = forwardRef(function TimeInputNative2({
34158
34305
  /* @__PURE__ */ jsx(
34159
34306
  HourInput,
34160
34307
  {
34308
+ id,
34161
34309
  amPm,
34162
34310
  autoFocus,
34163
34311
  disabled: !enabled2,
@@ -34254,23 +34402,6 @@ const TimeInputNative = forwardRef(function TimeInputNative2({
34254
34402
  ]
34255
34403
  }
34256
34404
  );
34257
- if (label2) {
34258
- return /* @__PURE__ */ jsx(
34259
- ItemWithLabel,
34260
- {
34261
- label: label2,
34262
- labelPosition,
34263
- labelWidth,
34264
- labelBreak: labelBreak2,
34265
- required: required2,
34266
- children: /* @__PURE__ */ jsxs(Fragment, { children: [
34267
- startAdornment,
34268
- timeInputComponent,
34269
- endAdornment
34270
- ] })
34271
- }
34272
- );
34273
- }
34274
34405
  return timeInputComponent;
34275
34406
  });
34276
34407
  function AmPmButton({
@@ -34635,10 +34766,6 @@ const TimeInputMd = createMetadata({
34635
34766
  readOnly: dReadonly(),
34636
34767
  enabled: dEnabled(defaultProps$k.enabled),
34637
34768
  validationStatus: dValidationStatus(defaultProps$k.validationStatus),
34638
- label: dLabel(),
34639
- labelPosition: dLabelPosition("top"),
34640
- labelWidth: dLabelWidth(COMP$z),
34641
- labelBreak: dLabelBreak(COMP$z),
34642
34769
  hour24: {
34643
34770
  description: "Whether to use 24-hour format (true) or 12-hour format with AM/PM (false)",
34644
34771
  valueType: "boolean",
@@ -34776,10 +34903,6 @@ const timeInputComponentRenderer = createComponentRenderer(
34776
34903
  clearIcon: extractValue(node.props.clearIcon),
34777
34904
  clearToInitialValue: extractValue.asOptionalBoolean(node.props.clearToInitialValue, defaultProps$k.clearToInitialValue),
34778
34905
  required: extractValue.asOptionalBoolean(node.props.required, defaultProps$k.required),
34779
- label: extractValue(node.props.label),
34780
- labelPosition: extractValue(node.props.labelPosition),
34781
- labelWidth: extractValue(node.props.labelWidth),
34782
- labelBreak: extractValue.asOptionalBoolean(node.props.labelBreak, defaultProps$k.labelBreak),
34783
34906
  startText: extractValue(node.props.startText),
34784
34907
  startIcon: extractValue(node.props.startIcon),
34785
34908
  endText: extractValue(node.props.endText),
@@ -35416,7 +35539,8 @@ function AppState({
35416
35539
  bucket = defaultProps$f.bucket,
35417
35540
  updateState,
35418
35541
  initialValue,
35419
- registerComponentApi
35542
+ registerComponentApi,
35543
+ onDidUpdate
35420
35544
  }) {
35421
35545
  const registerAppState = useAppStateContextPart((value2) => value2.registerAppState);
35422
35546
  const update = useAppStateContextPart((value2) => value2.update);
@@ -35428,18 +35552,45 @@ function AppState({
35428
35552
  const value = useAppStateContextPart((value2) => value2.appState[bucket]);
35429
35553
  useIsomorphicLayoutEffect(() => {
35430
35554
  updateState({ value });
35431
- }, [updateState, value]);
35555
+ if (onDidUpdate) {
35556
+ onDidUpdate({ bucket, value, previousValue: void 0 });
35557
+ }
35558
+ }, [updateState, value, onDidUpdate, bucket]);
35432
35559
  useIsomorphicLayoutEffect(() => {
35433
35560
  registerComponentApi({
35434
- update: (patch) => update(bucket, patch)
35561
+ update: (patch) => update(bucket, patch),
35562
+ appendToList: (key, id) => {
35563
+ const currentState = value || {};
35564
+ const currentArray = currentState[key] || [];
35565
+ if (!currentArray.includes(id)) {
35566
+ const newArray = [...currentArray, id];
35567
+ update(bucket, { [key]: newArray });
35568
+ }
35569
+ },
35570
+ removeFromList: (key, id) => {
35571
+ const currentState = value || {};
35572
+ const currentArray = currentState[key] || [];
35573
+ const newArray = currentArray.filter((item2) => item2 !== id);
35574
+ update(bucket, { [key]: newArray });
35575
+ },
35576
+ listIncludes: (key, id) => {
35577
+ const currentState = value || {};
35578
+ const currentArray = currentState[key] || [];
35579
+ return currentArray.includes(id);
35580
+ }
35435
35581
  });
35436
- }, [bucket, registerComponentApi, update]);
35582
+ }, [bucket, registerComponentApi, update, value]);
35437
35583
  return null;
35438
35584
  }
35439
35585
  const COMP$u = "AppState";
35440
35586
  const AppStateMd = createMetadata({
35441
35587
  status: "stable",
35442
35588
  description: "`AppState` is an invisible component that provides global state management across your entire application. Unlike component variables that are scoped locally, AppState allows any component to access and update shared state without prop drilling.",
35589
+ events: {
35590
+ didUpdate: d(
35591
+ "This event is fired when the AppState value is updated. The event provides the new state value as its parameter."
35592
+ )
35593
+ },
35443
35594
  props: {
35444
35595
  bucket: {
35445
35596
  description: `This property is the identifier of the bucket to which the \`${COMP$u}\` instance is bound. Multiple \`${COMP$u}\` instances with the same bucket will share the same state object: any of them updating the state will cause the other instances to view the new, updated state.`,
@@ -35457,6 +35608,30 @@ const AppStateMd = createMetadata({
35457
35608
  parameters: {
35458
35609
  newState: "An object that specifies the new state value."
35459
35610
  }
35611
+ },
35612
+ appendToList: {
35613
+ signature: "appendToList(key: string, id: any)",
35614
+ description: "This method appends an item to an array in the application state object bound to the `AppState` instance.",
35615
+ parameters: {
35616
+ key: "The key of the array in the state object.",
35617
+ id: "The item to append to the array."
35618
+ }
35619
+ },
35620
+ removeFromList: {
35621
+ signature: "removeFromList(key: string, id: any)",
35622
+ description: "This method removes an item from an array in the application state object bound to the `AppState` instance.",
35623
+ parameters: {
35624
+ key: "The key of the array in the state object.",
35625
+ id: "The item to remove from the array."
35626
+ }
35627
+ },
35628
+ listIncludes: {
35629
+ signature: "listIncludes(key: string, id: any)",
35630
+ description: "This method checks if an array in the application state object contains a specific item.",
35631
+ parameters: {
35632
+ key: "The key of the array in the state object.",
35633
+ id: "The item to check for in the array."
35634
+ }
35460
35635
  }
35461
35636
  },
35462
35637
  nonVisual: true
@@ -35464,14 +35639,15 @@ const AppStateMd = createMetadata({
35464
35639
  const appStateComponentRenderer = createComponentRenderer(
35465
35640
  COMP$u,
35466
35641
  AppStateMd,
35467
- ({ node, extractValue, updateState, registerComponentApi }) => {
35642
+ ({ node, extractValue, updateState, registerComponentApi, lookupEventHandler }) => {
35468
35643
  return /* @__PURE__ */ jsx(
35469
35644
  AppState,
35470
35645
  {
35471
35646
  bucket: extractValue(node.props.bucket),
35472
35647
  initialValue: extractValue(node.props.initialValue),
35473
35648
  updateState,
35474
- registerComponentApi
35649
+ registerComponentApi,
35650
+ onDidUpdate: lookupEventHandler("didUpdate")
35475
35651
  }
35476
35652
  );
35477
35653
  }
@@ -40846,7 +41022,8 @@ function PieChart({
40846
41022
  labelListPosition = defaultProps$5.labelListPosition,
40847
41023
  innerRadius = defaultProps$5.innerRadius,
40848
41024
  children,
40849
- outerRadius = "60%",
41025
+ outerRadius,
41026
+ // no default; we'll compute when undefined or "auto"
40850
41027
  showLegend = defaultProps$5.showLegend
40851
41028
  }) {
40852
41029
  const { getThemeVar } = useTheme();
@@ -40898,37 +41075,73 @@ function PieChart({
40898
41075
  }));
40899
41076
  }, [colorValues, data]);
40900
41077
  const chartContextValue = useChartContextValue({ dataKey, nameKey });
41078
+ const wrapperRef = useRef(null);
41079
+ const [box, setBox] = useState({ width: 0, height: 0 });
41080
+ useEffect(() => {
41081
+ if (!wrapperRef.current || typeof window === "undefined" || !window.ResizeObserver)
41082
+ return;
41083
+ const ro = new window.ResizeObserver((entries) => {
41084
+ var _a2;
41085
+ const cr = (_a2 = entries[0]) == null ? void 0 : _a2.contentRect;
41086
+ if (cr) setBox({ width: cr.width, height: cr.height });
41087
+ });
41088
+ ro.observe(wrapperRef.current);
41089
+ return () => ro.disconnect();
41090
+ }, []);
41091
+ const RING_PADDING = 8;
41092
+ const LABEL_GUTTER_OUTSIDE = 16;
41093
+ const LABEL_GUTTER_INSIDE = 6;
41094
+ const MIN_RING_THICKNESS = 12;
41095
+ const labelsOutside = !!showLabel || showLabelList && labelListPosition === "outside";
41096
+ const resolvedOuterRadius = useMemo(() => {
41097
+ const wantsAuto = outerRadius === void 0 || typeof outerRadius === "string" && outerRadius.toLowerCase() === "auto";
41098
+ if (!wantsAuto) return outerRadius;
41099
+ const base2 = Math.min(box.width, box.height) / 2;
41100
+ const gutter2 = labelsOutside ? LABEL_GUTTER_OUTSIDE : LABEL_GUTTER_INSIDE;
41101
+ const inner = Number(innerRadius) || 0;
41102
+ const derived = Math.max(inner + MIN_RING_THICKNESS, base2 - gutter2 - RING_PADDING);
41103
+ if (!Number.isFinite(derived) || derived <= 0) {
41104
+ return labelsOutside ? "72%" : "88%";
41105
+ }
41106
+ return derived;
41107
+ }, [outerRadius, box.width, box.height, labelsOutside, innerRadius]);
40901
41108
  return /* @__PURE__ */ jsxs(ChartProvider, { value: chartContextValue, children: [
40902
41109
  children,
40903
- /* @__PURE__ */ jsx("div", { className: classnames(styles$7.wrapper, className), style: style2, children: /* @__PURE__ */ jsx(ResponsiveContainer, { width: "100%", height: "100%", minWidth: 0, children: /* @__PURE__ */ jsxs(PieChart$1, { children: [
40904
- /* @__PURE__ */ jsx(Tooltip$2, { content: /* @__PURE__ */ jsx(TooltipContent, {}) }),
40905
- /* @__PURE__ */ jsx(
40906
- Pie,
40907
- {
40908
- data: chartData,
40909
- dataKey,
40910
- nameKey,
40911
- innerRadius,
40912
- outerRadius,
40913
- paddingAngle: 1,
40914
- activeShape: renderActiveShape,
40915
- label: showLabel ? renderCustomizedLabel : false,
40916
- labelLine: showLabel,
40917
- children: chartContextValue.labelList ? chartContextValue.labelList : showLabelList && /* @__PURE__ */ jsx(
40918
- LabelList$1,
41110
+ /* @__PURE__ */ jsx("div", { ref: wrapperRef, className: classnames(styles$7.wrapper, className), style: style2, children: /* @__PURE__ */ jsx(ResponsiveContainer, { width: "100%", height: "100%", minWidth: 0, children: /* @__PURE__ */ jsxs(
41111
+ PieChart$1,
41112
+ {
41113
+ margin: { top: 8, right: 8, bottom: labelsOutside ? 16 : 8, left: 8 },
41114
+ children: [
41115
+ /* @__PURE__ */ jsx(Tooltip$2, { content: /* @__PURE__ */ jsx(TooltipContent, {}) }),
41116
+ /* @__PURE__ */ jsx(
41117
+ Pie,
40919
41118
  {
40920
- position: labelListPosition,
40921
- dataKey: nameKey,
40922
- className: styles$7.labelList,
40923
- stroke: "none",
40924
- fill: "currentColor",
40925
- fontSize: 12
41119
+ data: chartData,
41120
+ dataKey,
41121
+ nameKey,
41122
+ innerRadius,
41123
+ outerRadius: resolvedOuterRadius,
41124
+ paddingAngle: 1,
41125
+ activeShape: renderActiveShape,
41126
+ label: showLabel ? renderCustomizedLabel : false,
41127
+ labelLine: showLabel,
41128
+ children: chartContextValue.labelList ? chartContextValue.labelList : showLabelList && /* @__PURE__ */ jsx(
41129
+ LabelList$1,
41130
+ {
41131
+ position: labelListPosition,
41132
+ dataKey: nameKey,
41133
+ className: styles$7.labelList,
41134
+ stroke: "none",
41135
+ fill: "currentColor",
41136
+ fontSize: 12
41137
+ }
41138
+ )
40926
41139
  }
40927
- )
40928
- }
40929
- ),
40930
- chartContextValue.legend ? chartContextValue.legend : showLegend && /* @__PURE__ */ jsx(Legend$1, {})
40931
- ] }) }) })
41140
+ ),
41141
+ chartContextValue.legend ? chartContextValue.legend : showLegend && /* @__PURE__ */ jsx(Legend$1, {})
41142
+ ]
41143
+ }
41144
+ ) }) })
40932
41145
  ] });
40933
41146
  }
40934
41147
  const COMP$8 = "DonutChart";
@@ -43627,7 +43840,7 @@ function IconProvider({ children }) {
43627
43840
  /* @__PURE__ */ jsx("svg", { style: { display: "none" }, ref: spriteRootRef })
43628
43841
  ] });
43629
43842
  }
43630
- const version = "0.10.14";
43843
+ const version = "0.10.15";
43631
43844
  const miscellaneousUtils = {
43632
43845
  capitalize,
43633
43846
  pluralize: pluralize$1,
@@ -46566,16 +46779,23 @@ function ApiBoundComponent({
46566
46779
  function generateloaderUid(key) {
46567
46780
  return `${node.uid}_data_${key}`;
46568
46781
  }
46569
- const loaders = [...node.loaders || []];
46570
- const events = { ...node.events || {} };
46571
- const props = { ...node.props || {} };
46572
- const vars2 = { ...node.vars || {} };
46573
- const api = { ...node.api || {} };
46574
- apiBoundEvents.forEach((key) => {
46575
- const { type } = node.events[key];
46782
+ function generateEventHandler(actionComponent) {
46783
+ const { type } = actionComponent;
46784
+ const prepareEvent = (eventData) => {
46785
+ if (!eventData) {
46786
+ return "undefined";
46787
+ }
46788
+ if (typeof eventData === "string") {
46789
+ return `"${eventData}"`;
46790
+ }
46791
+ if (typeof eventData.type === "string") {
46792
+ return generateEventHandler(eventData);
46793
+ }
46794
+ return JSON.stringify(eventData);
46795
+ };
46796
+ const { success, error: error2, progress, beforeRequest } = actionComponent.events || {};
46576
46797
  switch (type) {
46577
46798
  case "FileUpload": {
46578
- const actionComponent = node.events[key];
46579
46799
  const {
46580
46800
  invalidates,
46581
46801
  asForm,
@@ -46588,8 +46808,7 @@ function ApiBoundComponent({
46588
46808
  method,
46589
46809
  file
46590
46810
  } = actionComponent.props;
46591
- const { success, error: error2 } = actionComponent.events || {};
46592
- events[key] = `(eventArgs) => {
46811
+ return `(eventArgs) => {
46593
46812
  return Actions.upload({
46594
46813
  asForm: ${JSON.stringify(asForm)},
46595
46814
  formParams: ${JSON.stringify(formParams)},
@@ -46601,17 +46820,15 @@ function ApiBoundComponent({
46601
46820
  method: ${JSON.stringify(method)},
46602
46821
  file: ${JSON.stringify(file)},
46603
46822
  params: { '$param': eventArgs },
46604
- onError: ${JSON.stringify(error2)},
46605
- onSuccess: ${JSON.stringify(success)},
46823
+ onError: ${prepareEvent(error2)},
46824
+ onSuccess: ${prepareEvent(success)},
46606
46825
  onProgress: eventArgs.onProgress,
46607
46826
  invalidates: ${invalidates === void 0 ? void 0 : JSON.stringify(invalidates)} }, { resolveBindingExpressions: true });
46608
46827
  }`;
46609
- break;
46610
46828
  }
46611
46829
  case "FileDownload": {
46612
- const actionComponent = node.events[key];
46613
46830
  const { url, queryParams, rawBody, body, headers, method, fileName } = actionComponent.props;
46614
- events[key] = `(eventArgs) => {
46831
+ return `(eventArgs) => {
46615
46832
  return Actions.download({
46616
46833
  queryParams: ${JSON.stringify(queryParams)},
46617
46834
  rawBody: ${JSON.stringify(rawBody)},
@@ -46623,10 +46840,8 @@ function ApiBoundComponent({
46623
46840
  params: { '$param': eventArgs },
46624
46841
  }, { resolveBindingExpressions: true });
46625
46842
  }`;
46626
- break;
46627
46843
  }
46628
46844
  case "APICall": {
46629
- const actionComponent = node.events[key];
46630
46845
  const { when, uid: uid2 } = actionComponent;
46631
46846
  const {
46632
46847
  confirmTitle,
@@ -46647,8 +46862,7 @@ function ApiBoundComponent({
46647
46862
  rawBody,
46648
46863
  body
46649
46864
  } = actionComponent.props;
46650
- const { success, error: error2, progress, beforeRequest } = actionComponent.events || {};
46651
- events[key] = `(eventArgs, options) => {
46865
+ return `(eventArgs, options) => {
46652
46866
  return Actions.callApi({
46653
46867
  uid: ${JSON.stringify(uid2)},
46654
46868
  headers: ${JSON.stringify(headers)},
@@ -46664,10 +46878,10 @@ function ApiBoundComponent({
46664
46878
  completedNotificationMessage: ${JSON.stringify(completedNotificationMessage)},
46665
46879
  errorNotificationMessage: ${JSON.stringify(errorNotificationMessage)},
46666
46880
  params: { '$param': eventArgs },
46667
- onError: ${JSON.stringify(error2)},
46668
- onProgress: ${JSON.stringify(progress)},
46669
- onBeforeRequest: ${JSON.stringify(beforeRequest)},
46670
- onSuccess: ${JSON.stringify(success)},
46881
+ onError: ${prepareEvent(error2)},
46882
+ onProgress: ${prepareEvent(progress)},
46883
+ onBeforeRequest: ${prepareEvent(beforeRequest)},
46884
+ onSuccess: ${prepareEvent(success)},
46671
46885
  updates: ${JSON.stringify(updates)},
46672
46886
  optimisticValue: ${JSON.stringify(optimisticValue)},
46673
46887
  payloadType: ${JSON.stringify(payloadType)},
@@ -46675,12 +46889,20 @@ function ApiBoundComponent({
46675
46889
  invalidates: ${invalidates === void 0 ? void 0 : JSON.stringify(invalidates)},
46676
46890
  when: ${when === void 0 ? void 0 : JSON.stringify(when)} }, { resolveBindingExpressions: true });
46677
46891
  }`;
46678
- break;
46679
46892
  }
46680
46893
  default: {
46681
46894
  throw new Error("Unknown event handler component type: ", type);
46682
46895
  }
46683
46896
  }
46897
+ }
46898
+ const loaders = [...node.loaders || []];
46899
+ const events = { ...node.events || {} };
46900
+ const props = { ...node.props || {} };
46901
+ const vars2 = { ...node.vars || {} };
46902
+ const api = { ...node.api || {} };
46903
+ apiBoundEvents.forEach((key) => {
46904
+ const actionComponent = node.events[key];
46905
+ events[key] = generateEventHandler(actionComponent);
46684
46906
  });
46685
46907
  apiBoundProps.forEach((key) => {
46686
46908
  var _a2, _b, _c;
@@ -47043,6 +47265,126 @@ const Animation$1 = forwardRef(function Animation2({
47043
47265
  }, [animateWhenInView, animationStyles, children, springs, rest]);
47044
47266
  return content2;
47045
47267
  });
47268
+ const tooltipBehavior = {
47269
+ name: "tooltip",
47270
+ canAttach: (node) => {
47271
+ var _a2, _b;
47272
+ const tooltipText = (_a2 = node.props) == null ? void 0 : _a2.tooltip;
47273
+ const tooltipMarkdown = (_b = node.props) == null ? void 0 : _b.tooltipMarkdown;
47274
+ return !!tooltipText || !!tooltipMarkdown;
47275
+ },
47276
+ attach: (context, node) => {
47277
+ var _a2, _b, _c;
47278
+ const { extractValue } = context;
47279
+ const tooltipText = extractValue((_a2 = context.node.props) == null ? void 0 : _a2.tooltip, true);
47280
+ const tooltipMarkdown = extractValue((_b = context.node.props) == null ? void 0 : _b.tooltipMarkdown, true);
47281
+ const tooltipOptions = extractValue((_c = context.node.props) == null ? void 0 : _c.tooltipOptions, true);
47282
+ const parsedOptions = parseTooltipOptions(tooltipOptions);
47283
+ return /* @__PURE__ */ jsx(Tooltip, { text: tooltipText, markdown: tooltipMarkdown, ...parsedOptions, children: node });
47284
+ }
47285
+ };
47286
+ const animationBehavior = {
47287
+ name: "animation",
47288
+ canAttach: (node) => {
47289
+ var _a2;
47290
+ return !!((_a2 = node.props) == null ? void 0 : _a2.animation);
47291
+ },
47292
+ attach: (context, node) => {
47293
+ var _a2, _b;
47294
+ const { extractValue } = context;
47295
+ const animation = extractValue((_a2 = context.node.props) == null ? void 0 : _a2.animation, true);
47296
+ const animationOptions = extractValue(
47297
+ (_b = context.node.props) == null ? void 0 : _b.animationOptions,
47298
+ true
47299
+ );
47300
+ const parsedOptions = parseAnimationOptions(animationOptions);
47301
+ return /* @__PURE__ */ jsx(Animation$1, { animation: parseAnimation(animation), ...parsedOptions, children: node });
47302
+ }
47303
+ };
47304
+ const labelBehavior = {
47305
+ name: "label",
47306
+ canAttach: (node, metadata) => {
47307
+ var _a2, _b;
47308
+ if ((_a2 = metadata == null ? void 0 : metadata.props) == null ? void 0 : _a2.label) {
47309
+ return false;
47310
+ } else if (!((_b = node.props) == null ? void 0 : _b.label)) {
47311
+ return false;
47312
+ }
47313
+ return true;
47314
+ },
47315
+ attach: (context, node) => {
47316
+ const { extractValue, node: componentNode, className } = context;
47317
+ const label2 = extractValue.asOptionalString(componentNode.props.label);
47318
+ const labelPosition = extractValue(componentNode.props.labelPosition);
47319
+ const labelWidth = extractValue.asOptionalString(componentNode.props.labelWidth);
47320
+ const labelBreak2 = extractValue.asOptionalBoolean(componentNode.props.labelBreak);
47321
+ const required2 = extractValue.asOptionalBoolean(componentNode.props.required);
47322
+ const enabled2 = extractValue.asOptionalBoolean(componentNode.props.enabled, true);
47323
+ const shrinkToLabel2 = extractValue.asOptionalBoolean(componentNode.props.shrinkToLabel);
47324
+ const style2 = extractValue(componentNode.props.style);
47325
+ const generatedId2 = useId();
47326
+ return /* @__PURE__ */ jsx(
47327
+ ItemWithLabel,
47328
+ {
47329
+ id: componentNode.uid || generatedId2,
47330
+ labelPosition,
47331
+ label: label2,
47332
+ labelWidth,
47333
+ labelBreak: labelBreak2,
47334
+ required: required2,
47335
+ enabled: enabled2,
47336
+ style: style2,
47337
+ className,
47338
+ shrinkToLabel: shrinkToLabel2,
47339
+ testId: componentNode.testId,
47340
+ children: node
47341
+ }
47342
+ );
47343
+ }
47344
+ };
47345
+ const BehaviorContext = createContext(
47346
+ void 0
47347
+ );
47348
+ const BehaviorsProvider = ({ children }) => {
47349
+ const behaviors = useMemo(() => /* @__PURE__ */ new Map(), []);
47350
+ const getBehaviors = () => {
47351
+ return Array.from(behaviors.values());
47352
+ };
47353
+ const registerBehavior = (behavior) => {
47354
+ behaviors.set(behavior.name, behavior);
47355
+ };
47356
+ const unregisterBehavior = (name) => {
47357
+ behaviors.delete(name);
47358
+ };
47359
+ useMemo(() => {
47360
+ if (process.env.VITE_USED_BEHAVIORS_Animation !== "false") {
47361
+ registerBehavior(animationBehavior);
47362
+ }
47363
+ if (process.env.VITE_USED_BEHAVIORS_Tooltip !== "false") {
47364
+ registerBehavior(tooltipBehavior);
47365
+ }
47366
+ if (process.env.VITE_USED_BEHAVIORS_Label !== "false") {
47367
+ registerBehavior(labelBehavior);
47368
+ }
47369
+ }, []);
47370
+ const contextValue2 = useMemo(
47371
+ () => ({
47372
+ behaviors,
47373
+ registerBehavior,
47374
+ unregisterBehavior,
47375
+ getBehaviors
47376
+ }),
47377
+ [behaviors]
47378
+ );
47379
+ return /* @__PURE__ */ jsx(BehaviorContext.Provider, { value: contextValue2, children });
47380
+ };
47381
+ const useBehaviors = () => {
47382
+ const context = useContext(BehaviorContext);
47383
+ if (!context) {
47384
+ throw new Error("useBehaviors must be used within a BehaviorsProvider");
47385
+ }
47386
+ return context;
47387
+ };
47046
47388
  const ComponentAdapter = forwardRef(function ComponentAdapter2({
47047
47389
  node,
47048
47390
  state,
@@ -47168,63 +47510,28 @@ const ComponentAdapter = forwardRef(function ComponentAdapter2({
47168
47510
  mediaSize: appContext.mediaSize
47169
47511
  });
47170
47512
  }, [appContext.mediaSize, layoutContextRef, safeNode.props, valueExtractor]);
47171
- const tooltipText = useMemo(
47172
- () => {
47173
- var _a3;
47174
- return valueExtractor((_a3 = safeNode.props) == null ? void 0 : _a3.tooltip, true);
47175
- },
47176
- [safeNode.props, valueExtractor]
47177
- );
47178
- const tooltipMarkdown = useMemo(
47179
- () => {
47180
- var _a3;
47181
- return valueExtractor((_a3 = safeNode.props) == null ? void 0 : _a3.tooltipMarkdown, true);
47182
- },
47183
- [safeNode.props, valueExtractor]
47184
- );
47185
- const tooltipOptions = useMemo(
47186
- () => {
47187
- var _a3;
47188
- return valueExtractor((_a3 = safeNode.props) == null ? void 0 : _a3.tooltipOptions, true);
47189
- },
47190
- [safeNode.props, valueExtractor]
47191
- );
47192
- const animation = useMemo(
47193
- () => {
47194
- var _a3;
47195
- return valueExtractor((_a3 = safeNode.props) == null ? void 0 : _a3.animation, true);
47196
- },
47197
- [safeNode.props, valueExtractor]
47198
- );
47199
- const animationOptions = useMemo(
47200
- () => {
47201
- var _a3;
47202
- return valueExtractor((_a3 = safeNode.props) == null ? void 0 : _a3.animationOptions, true);
47203
- },
47204
- [safeNode.props, valueExtractor]
47205
- );
47206
47513
  const stableLayoutCss = useShallowCompareMemoize(cssProps);
47207
47514
  const className = useComponentStyle(stableLayoutCss);
47208
47515
  const { inspectId, refreshInspection } = useInspector(safeNode, uid);
47516
+ const rendererContext = {
47517
+ node: safeNode,
47518
+ state: state[uid] || EMPTY_OBJECT,
47519
+ updateState: memoedUpdateState,
47520
+ appContext,
47521
+ extractValue: valueExtractor,
47522
+ lookupEventHandler: memoedLookupEventHandler,
47523
+ lookupAction: memoedLookupAction,
47524
+ lookupSyncCallback: memoedLookupSyncCallback,
47525
+ extractResourceUrl,
47526
+ renderChild: memoedRenderChild,
47527
+ registerComponentApi: memoedRegisterComponentApi,
47528
+ className,
47529
+ layoutContext: layoutContextRef == null ? void 0 : layoutContextRef.current,
47530
+ uid
47531
+ };
47209
47532
  let renderedNode = null;
47210
47533
  let renderingError = null;
47211
47534
  try {
47212
- const rendererContext = {
47213
- node: safeNode,
47214
- state: state[uid] || EMPTY_OBJECT,
47215
- updateState: memoedUpdateState,
47216
- appContext,
47217
- extractValue: valueExtractor,
47218
- lookupEventHandler: memoedLookupEventHandler,
47219
- lookupAction: memoedLookupAction,
47220
- lookupSyncCallback: memoedLookupSyncCallback,
47221
- extractResourceUrl,
47222
- renderChild: memoedRenderChild,
47223
- registerComponentApi: memoedRegisterComponentApi,
47224
- className,
47225
- layoutContext: layoutContextRef == null ? void 0 : layoutContextRef.current,
47226
- uid
47227
- };
47228
47535
  if (safeNode.type === "Slot") {
47229
47536
  renderedNode = slotRenderer(rendererContext, parentRenderContext);
47230
47537
  } else {
@@ -47311,23 +47618,20 @@ const ComponentAdapter = forwardRef(function ComponentAdapter2({
47311
47618
  } else {
47312
47619
  nodeToRender = React__default.isValidElement(renderedNode) && !!children ? cloneElement(renderedNode, null, children) : renderedNode;
47313
47620
  }
47314
- const applyWrappers = (node2) => {
47315
- if (animation && (tooltipMarkdown || tooltipText)) {
47316
- const parsedOptions = parseTooltipOptions(tooltipOptions);
47317
- const parsedAnimationOptions = parseAnimationOptions(animationOptions);
47318
- return /* @__PURE__ */ jsx(Tooltip, { text: tooltipText, markdown: tooltipMarkdown, ...parsedOptions, children: /* @__PURE__ */ jsx(Animation$1, { animation: parseAnimation(animation), ...parsedAnimationOptions, children: node2 }) });
47319
- }
47320
- if (animation) {
47321
- const parsedAnimationOptions = parseAnimationOptions(animationOptions);
47322
- return /* @__PURE__ */ jsx(Animation$1, { animation: parseAnimation(animation), ...parsedAnimationOptions, children: node2 });
47323
- }
47324
- if (tooltipMarkdown || tooltipText) {
47325
- const parsedOptions = parseTooltipOptions(tooltipOptions);
47326
- return /* @__PURE__ */ jsx(Tooltip, { text: tooltipText, markdown: tooltipMarkdown, ...parsedOptions, children: node2 });
47621
+ const { getBehaviors } = useBehaviors();
47622
+ const applyBehaviors = (node2) => {
47623
+ const behaviors = getBehaviors();
47624
+ let wrappedNode = node2;
47625
+ if (!isCompoundComponent) {
47626
+ for (const behavior of behaviors) {
47627
+ if (behavior.canAttach(rendererContext.node, descriptor)) {
47628
+ wrappedNode = behavior.attach(rendererContext, wrappedNode);
47629
+ }
47630
+ }
47327
47631
  }
47328
- return node2;
47632
+ return wrappedNode;
47329
47633
  };
47330
- return applyWrappers(nodeToRender);
47634
+ return applyBehaviors(nodeToRender);
47331
47635
  });
47332
47636
  function slotRenderer({ node, extractValue, renderChild: renderChild2, lookupAction, layoutContext }, parentRenderContext) {
47333
47637
  const templateName = extractValue.asOptionalString(node.props.name);
@@ -48483,7 +48787,7 @@ function AppRoot({
48483
48787
  ...globalProps,
48484
48788
  isNested
48485
48789
  }), [globalProps, isNested]);
48486
- return /* @__PURE__ */ jsx(ComponentProvider, { contributes, extensionManager, children: /* @__PURE__ */ jsx(StyleProvider, { children: /* @__PURE__ */ jsx(DebugViewProvider, { debugConfig: globalProps == null ? void 0 : globalProps.debug, children: /* @__PURE__ */ jsx(
48790
+ return /* @__PURE__ */ jsx(ComponentProvider, { contributes, extensionManager, children: /* @__PURE__ */ jsx(StyleProvider, { children: /* @__PURE__ */ jsx(BehaviorsProvider, { children: /* @__PURE__ */ jsx(DebugViewProvider, { debugConfig: globalProps == null ? void 0 : globalProps.debug, children: /* @__PURE__ */ jsx(
48487
48791
  AppWrapper,
48488
48792
  {
48489
48793
  projectCompilation,
@@ -48505,7 +48809,7 @@ function AppRoot({
48505
48809
  onInit,
48506
48810
  children
48507
48811
  }
48508
- ) }) }) });
48812
+ ) }) }) }) });
48509
48813
  }
48510
48814
  function getTransitiveDependencies(directCompDepNames, components) {
48511
48815
  const allDepsByCompName = components.reduce(
@@ -49794,31 +50098,66 @@ function discoverDirectComponentDependenciesHelp(component2, registry, deps) {
49794
50098
  return deps;
49795
50099
  }
49796
50100
  export {
49797
- AppRoot as A,
49798
- Button as B,
49799
- ApiInterceptorProvider as C,
49800
- Spinner as D,
49801
- ErrorBoundary as E,
49802
- useThemes as F,
49803
- builtInThemes as G,
49804
- Text as H,
49805
- Icon as I,
49806
- TextBox as J,
49807
- ToneChangerButton as K,
49808
- LinkNative as L,
49809
- Logo as M,
49810
- NestedApp as N,
49811
- Breakout as O,
49812
- useSearchContextContent as P,
49813
- useAppLayoutContext as Q,
49814
- StyleProvider as R,
50101
+ Icon as $,
50102
+ dInitialValue as A,
50103
+ dInternal as B,
50104
+ dLabel as C,
50105
+ dLabelBreak as D,
50106
+ dLabelPosition as E,
50107
+ dLabelWidth as F,
50108
+ dLostFocus as G,
50109
+ dMaxLength as H,
50110
+ dMulti as I,
50111
+ dOrientation as J,
50112
+ dPlaceholder as K,
50113
+ dReadonly as L,
50114
+ dRequired as M,
50115
+ dStartIcon as N,
50116
+ dStartText as O,
50117
+ dSetValueApi as P,
50118
+ dTriggerTemplate as Q,
50119
+ dValidationStatus as R,
49815
50120
  StandaloneApp as S,
49816
50121
  ThrowStatementError as T,
49817
- StyleRegistry as U,
49818
- VisuallyHidden as V,
49819
- useEvent as W,
49820
- StandaloneComponent as X,
50122
+ dValue as U,
50123
+ dValueApi as V,
50124
+ parseScssVar as W,
50125
+ startApp as X,
50126
+ useTheme as Y,
50127
+ AppRoot as Z,
50128
+ ErrorBoundary as _,
49821
50129
  dateFunctions as a,
50130
+ Stack as a0,
50131
+ Button as a1,
50132
+ Splitter as a2,
50133
+ getColor as a3,
50134
+ TabItemComponent as a4,
50135
+ Tabs as a5,
50136
+ useColors as a6,
50137
+ toCssVar$1 as a7,
50138
+ useDevTools as a8,
50139
+ useLogger as a9,
50140
+ errReportComponent as aa,
50141
+ xmlUiMarkupToComponent as ab,
50142
+ ApiInterceptorProvider as ac,
50143
+ Spinner as ad,
50144
+ useThemes as ae,
50145
+ builtInThemes as af,
50146
+ Text as ag,
50147
+ TextBox as ah,
50148
+ NestedApp as ai,
50149
+ VisuallyHidden as aj,
50150
+ LinkNative as ak,
50151
+ ToneChangerButton as al,
50152
+ Logo as am,
50153
+ Breakout as an,
50154
+ useSearchContextContent as ao,
50155
+ useAppLayoutContext as ap,
50156
+ StyleProvider as aq,
50157
+ StyleRegistry as ar,
50158
+ useEvent as as,
50159
+ StandaloneComponent as at,
50160
+ Theme as au,
49822
50161
  StandaloneExtensionManager as b,
49823
50162
  createComponentRenderer as c,
49824
50163
  delay$1 as d,
@@ -49827,21 +50166,21 @@ export {
49827
50166
  getDate as g,
49828
50167
  d as h,
49829
50168
  dComponent as i,
49830
- Stack as j,
49831
- Splitter as k,
49832
- getColor as l,
50169
+ dAutoFocus as j,
50170
+ dClick as k,
50171
+ dCollapse as l,
49833
50172
  miscellaneousUtils as m,
49834
- TabItemComponent as n,
50173
+ dDidChange as n,
49835
50174
  orderBy as o,
49836
- parseScssVar as p,
49837
- Tabs as q,
50175
+ dDidClose as p,
50176
+ dDidOpen as q,
49838
50177
  runEventHandlerCode as r,
49839
- startApp as s,
49840
- useColors as t,
49841
- useTheme as u,
49842
- toCssVar$1 as v,
49843
- useDevTools as w,
49844
- useLogger as x,
49845
- errReportComponent as y,
49846
- xmlUiMarkupToComponent as z
50178
+ dEnabled as s,
50179
+ dFocus as t,
50180
+ dEndIcon as u,
50181
+ dEndText as v,
50182
+ dExpanded as w,
50183
+ dExpand as x,
50184
+ dGotFocus as y,
50185
+ dIndeterminate as z
49847
50186
  };