xmlui 0.11.10 → 0.11.12

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.
@@ -254,11 +254,12 @@ declare interface Behavior {
254
254
  /**
255
255
  * A function that determines if the behavior should be applied based on the
256
256
  * component's context and props.
257
+ * @param context The renderer context of the component.
257
258
  * @param node The component definition.
258
259
  * @param metadata The metadata of the component.
259
260
  * @returns True if the behavior can be attached, otherwise false.
260
261
  */
261
- canAttach: (node: ComponentDef, metadata: ComponentMetadata) => boolean;
262
+ canAttach: (context: RendererContext<any>, node: ComponentDef, metadata: ComponentMetadata) => boolean;
262
263
  /**
263
264
  * A function that attaches the behavior to the component's React node.
264
265
  * @param context The renderer context of the component.
package/dist/lib/xmlui.js CHANGED
@@ -1,4 +1,4 @@
1
- import { aa, Z, al, a1, ax, av, _, $, ai, ak, aw, ag, ab, a2, a0, S, ar, b, ao, ap, a4, a5, ae, af, as, aj, at, au, ah, ad, c, f, e, h, j, k, l, i, n, p, q, s, u, v, x, w, t, y, z, A, B, C, D, E, F, G, H, I, J, K, L, M, P, N, O, Q, R, U, V, a3, W, X, a7, an, a6, a8, aq, a9, am, Y, ac } from "./index-DfOJVz5h.js";
1
+ import { aa, Z, al, a1, ax, av, _, $, ai, ak, aw, ag, ab, a2, a0, S, ar, b, ao, ap, a4, a5, ae, af, as, aj, at, au, ah, ad, c, f, e, h, j, k, l, i, n, p, q, s, u, v, x, w, t, y, z, A, B, C, D, E, F, G, H, I, J, K, L, M, P, N, O, Q, R, U, V, a3, W, X, a7, an, a6, a8, aq, a9, am, Y, ac } from "./index-C_siLDTF.js";
2
2
  import { e as e2, x as x2 } from "./xmlui-parser-CW8YmGjO.js";
3
3
  import { X as X2 } from "./xmlui-serializer-CeCcgdVR.js";
4
4
  export {
@@ -12,7 +12,6 @@ import Color from "color";
12
12
  import toast, { Toaster, ToastBar } from "react-hot-toast";
13
13
  import { useLocation, NavLink as NavLink$1, useNavigate, Link, Routes, Route, Navigate, useParams, useSearchParams } from "@remix-run/react";
14
14
  import * as SheetPrimitive from "@radix-ui/react-dialog";
15
- import * as ReactDropdownMenu from "@radix-ui/react-dropdown-menu";
16
15
  import { DropdownMenu as DropdownMenu$1, DropdownMenuTrigger, DropdownMenuPortal, DropdownMenuContent as DropdownMenuContent$1, DropdownMenuItem as DropdownMenuItem$1, DropdownMenuSub, DropdownMenuSubTrigger as DropdownMenuSubTrigger$1, DropdownMenuSubContent as DropdownMenuSubContent$1 } from "@radix-ui/react-dropdown-menu";
17
16
  import { createContext as createContext$1, useContextSelector } from "use-context-selector";
18
17
  import { parseRegExpLiteral } from "@eslint-community/regexpp";
@@ -2962,6 +2961,9 @@ const Button = React__default.forwardRef(function Button2({
2962
2961
  }, 0);
2963
2962
  }
2964
2963
  }, [autoFocus]);
2964
+ if (variant === "") {
2965
+ variant = defaultProps$1g.variant;
2966
+ }
2965
2967
  const iconToLeft = iconPosition === "start";
2966
2968
  if (!isSizeType(size)) {
2967
2969
  size = defaultProps$1g.size;
@@ -4546,9 +4548,10 @@ const TextBox = forwardRef(function TextBox2({
4546
4548
  useEffect(() => {
4547
4549
  setLocalValue(value);
4548
4550
  }, [value]);
4551
+ const normalizedInitialValue = initialValue ?? "";
4549
4552
  useEffect(() => {
4550
- updateState({ value: initialValue }, { initial: true });
4551
- }, [initialValue, updateState]);
4553
+ updateState({ value: normalizedInitialValue }, { initial: true });
4554
+ }, [normalizedInitialValue, updateState]);
4552
4555
  const updateValue = useCallback(
4553
4556
  (value2) => {
4554
4557
  setLocalValue(value2);
@@ -4630,6 +4633,15 @@ const TextBox = forwardRef(function TextBox2({
4630
4633
  required: required2
4631
4634
  }
4632
4635
  ),
4636
+ !readOnly2 && enabled2 && localValue.length > 0 && type == "search" && /* @__PURE__ */ jsx(
4637
+ Adornment,
4638
+ {
4639
+ "data-part-id": PART_END_ADORNMENT,
4640
+ iconName: "close",
4641
+ className: styles$1g.adornment,
4642
+ onClick: () => updateValue("")
4643
+ }
4644
+ ),
4633
4645
  type === "password" && showPasswordToggle ? /* @__PURE__ */ jsx(
4634
4646
  Adornment,
4635
4647
  {
@@ -6812,6 +6824,36 @@ const XmlUiRedThemeDefinition = {
6812
6824
  extends: "xmlui",
6813
6825
  themeVars: { ...redThemeColors }
6814
6826
  };
6827
+ const XmlUiDocsThemeDefinition = {
6828
+ id: "xmlui-docs",
6829
+ extends: "xmlui",
6830
+ themeVars: {}
6831
+ };
6832
+ const XmlUiBlogThemeDefinition = {
6833
+ id: "xmlui-blog",
6834
+ extends: "xmlui",
6835
+ themeVars: {}
6836
+ };
6837
+ const XmlUiWebThemeDefinition = {
6838
+ id: "xmlui-web",
6839
+ extends: "xmlui",
6840
+ themeVars: {
6841
+ // --- Fundamental colors & typography
6842
+ "maxWidth-content-AppHeader": "1280px",
6843
+ backgroundColor: "$color-surface-0",
6844
+ "color-primary": "#3367CC",
6845
+ "color-surface": "#1e2734",
6846
+ "fontWeight-Text": "400",
6847
+ "fontWeight-bold": "700",
6848
+ "textColor-primary": "$color-surface-800",
6849
+ "textColor-NavLink--active": "$color-primary",
6850
+ // --- App layout
6851
+ "maxWidth-content-App": "800px",
6852
+ // --- Headings
6853
+ "fontSize-H2": "32px",
6854
+ "fontSize-H3": "$space-6"
6855
+ }
6856
+ };
6815
6857
  const ThemeToneKeys = ["light", "dark"];
6816
6858
  function useCompiledTheme(activeTheme, activeTone, themes = EMPTY_ARRAY, resources = EMPTY_OBJECT, resourceMap = EMPTY_OBJECT) {
6817
6859
  const componentRegistry = useComponentRegistry();
@@ -6976,7 +7018,10 @@ const builtInThemes = [
6976
7018
  XmlUiOrangeThemeDefinition,
6977
7019
  XmlUiPurpleThemeDefinition,
6978
7020
  XmlUiCyanThemeDefinition,
6979
- XmlUiRedThemeDefinition
7021
+ XmlUiRedThemeDefinition,
7022
+ XmlUiDocsThemeDefinition,
7023
+ XmlUiBlogThemeDefinition,
7024
+ XmlUiWebThemeDefinition
6980
7025
  /*SolidThemeDefinition,*/
6981
7026
  ];
6982
7027
  function ThemeProvider({
@@ -8176,9 +8221,16 @@ const DropDownNavGroup = forwardRef(function DropDownNavGroup2({
8176
8221
  Trigger2 = DropdownMenuSubTrigger$1;
8177
8222
  Content2 = DropdownMenuSubContent$1;
8178
8223
  }
8179
- const [expanded2, setExpanded] = useState(initiallyExpanded);
8224
+ const [expanded2, setExpanded] = useState(false);
8180
8225
  const [renderCount, setRenderCount] = useState(false);
8181
- useEffect(() => setRenderCount(true), []);
8226
+ useEffect(() => {
8227
+ setRenderCount(true);
8228
+ if (initiallyExpanded) {
8229
+ requestAnimationFrame(() => {
8230
+ setExpanded(true);
8231
+ });
8232
+ }
8233
+ }, [initiallyExpanded]);
8182
8234
  return /* @__PURE__ */ jsxs(
8183
8235
  Wrapper,
8184
8236
  {
@@ -18360,6 +18412,11 @@ const styles$Z = {
18360
18412
  wrapper: wrapper$h,
18361
18413
  DropdownMenuSeparator
18362
18414
  };
18415
+ const DropdownMenuContext = createContext(null);
18416
+ const useDropdownMenuContext = () => {
18417
+ const context = useContext(DropdownMenuContext);
18418
+ return context;
18419
+ };
18363
18420
  const defaultDropdownMenuProps = {
18364
18421
  alignment: "start",
18365
18422
  triggerButtonVariant: "ghost",
@@ -18400,11 +18457,44 @@ const DropdownMenu = forwardRef(function DropdownMenu2({
18400
18457
  }
18401
18458
  };
18402
18459
  }, []);
18403
- return /* @__PURE__ */ jsxs(
18404
- ReactDropdownMenu.Root,
18460
+ const closeMenu = useCallback(() => {
18461
+ setOpen(false);
18462
+ }, []);
18463
+ const contentRef = useRef(null);
18464
+ const handleKeyDown = useCallback((event) => {
18465
+ if (event.key === "Escape") {
18466
+ setOpen(false);
18467
+ return;
18468
+ }
18469
+ if (event.key === "ArrowDown" || event.key === "ArrowUp") {
18470
+ event.preventDefault();
18471
+ const content2 = contentRef.current;
18472
+ if (!content2) return;
18473
+ const menuItems = Array.from(
18474
+ content2.querySelectorAll('[role="menuitem"]:not([class*="disabled"])')
18475
+ );
18476
+ if (menuItems.length === 0) return;
18477
+ const currentIndex = menuItems.findIndex((item2) => item2 === document.activeElement);
18478
+ let nextIndex;
18479
+ if (currentIndex === -1) {
18480
+ nextIndex = event.key === "ArrowDown" ? 0 : menuItems.length - 1;
18481
+ } else if (event.key === "ArrowDown") {
18482
+ nextIndex = currentIndex < menuItems.length - 1 ? currentIndex + 1 : 0;
18483
+ } else {
18484
+ nextIndex = currentIndex > 0 ? currentIndex - 1 : menuItems.length - 1;
18485
+ }
18486
+ menuItems[nextIndex]?.focus();
18487
+ }
18488
+ if (event.key === "Enter" || event.key === " ") {
18489
+ return;
18490
+ }
18491
+ }, []);
18492
+ return /* @__PURE__ */ jsx(DropdownMenuContext.Provider, { value: { closeMenu }, children: /* @__PURE__ */ jsxs(
18493
+ Popover,
18405
18494
  {
18406
18495
  open,
18407
18496
  onOpenChange: async (isOpen) => {
18497
+ if (disabled2) return;
18408
18498
  if (isOpen) {
18409
18499
  if (closeTimeoutRef.current) {
18410
18500
  clearTimeout(closeTimeoutRef.current);
@@ -18422,31 +18512,51 @@ const DropdownMenu = forwardRef(function DropdownMenu2({
18422
18512
  }, 0);
18423
18513
  }
18424
18514
  },
18515
+ modal: false,
18425
18516
  children: [
18426
- /* @__PURE__ */ jsx(ReactDropdownMenu.Trigger, { ...rest, asChild: true, disabled: disabled2, ref, children: triggerTemplate ? triggerTemplate : /* @__PURE__ */ jsx(
18427
- Button,
18517
+ /* @__PURE__ */ jsx(
18518
+ PopoverTrigger,
18428
18519
  {
18429
- icon: /* @__PURE__ */ jsx(Icon$l, { name: triggerButtonIcon, fallback: "chevrondown" }),
18430
- iconPosition: triggerButtonIconPosition,
18431
- type: "button",
18432
- variant: triggerButtonVariant,
18433
- themeColor: triggerButtonThemeColor,
18520
+ ...rest,
18521
+ asChild: true,
18434
18522
  disabled: disabled2,
18435
- children: label2
18523
+ ref,
18524
+ "aria-haspopup": "menu",
18525
+ "aria-expanded": open,
18526
+ children: triggerTemplate ? triggerTemplate : /* @__PURE__ */ jsx(
18527
+ Button,
18528
+ {
18529
+ icon: /* @__PURE__ */ jsx(Icon$l, { name: triggerButtonIcon, fallback: "chevrondown" }),
18530
+ iconPosition: triggerButtonIconPosition,
18531
+ type: "button",
18532
+ variant: triggerButtonVariant,
18533
+ themeColor: triggerButtonThemeColor,
18534
+ disabled: disabled2,
18535
+ children: label2
18536
+ }
18537
+ )
18436
18538
  }
18437
- ) }),
18438
- /* @__PURE__ */ jsx(ReactDropdownMenu.Portal, { container: root2, children: /* @__PURE__ */ jsx(
18439
- ReactDropdownMenu.Content,
18539
+ ),
18540
+ /* @__PURE__ */ jsx(Portal, { container: root2, children: /* @__PURE__ */ jsx(
18541
+ PopoverContent,
18440
18542
  {
18543
+ ref: contentRef,
18441
18544
  align: alignment,
18442
18545
  style: style2,
18443
18546
  className: classnames(styles$Z.DropdownMenuContent, className),
18547
+ onOpenAutoFocus: (e) => {
18548
+ e.preventDefault();
18549
+ contentRef.current?.focus();
18550
+ },
18551
+ onKeyDownCapture: handleKeyDown,
18552
+ role: "menu",
18553
+ tabIndex: -1,
18444
18554
  children
18445
18555
  }
18446
18556
  ) })
18447
18557
  ]
18448
18558
  }
18449
- );
18559
+ ) });
18450
18560
  });
18451
18561
  const defaultMenuItemProps = {
18452
18562
  iconPosition: "start",
@@ -18464,26 +18574,45 @@ const MenuItem = forwardRef(function MenuItem2({
18464
18574
  enabled: enabled2 = true
18465
18575
  }, ref) {
18466
18576
  const iconToStart = iconPosition === "start";
18577
+ const context = useDropdownMenuContext();
18578
+ const handleClick = useCallback(
18579
+ (event) => {
18580
+ if (!enabled2) return;
18581
+ onClick(event);
18582
+ context?.closeMenu();
18583
+ },
18584
+ [enabled2, onClick, context]
18585
+ );
18586
+ const handleKeyDown = useCallback(
18587
+ (event) => {
18588
+ if (!enabled2) return;
18589
+ if (event.key === "Enter") {
18590
+ event.preventDefault();
18591
+ event.stopPropagation();
18592
+ onClick(event);
18593
+ context?.closeMenu();
18594
+ } else if (event.key === " ") {
18595
+ event.preventDefault();
18596
+ event.stopPropagation();
18597
+ onClick(event);
18598
+ context?.closeMenu();
18599
+ }
18600
+ },
18601
+ [enabled2, onClick, context]
18602
+ );
18467
18603
  return /* @__PURE__ */ jsxs(
18468
- ReactDropdownMenu.Item,
18604
+ "div",
18469
18605
  {
18470
18606
  style: style2,
18471
18607
  className: classnames(className, styles$Z.DropdownMenuItem, {
18472
18608
  [styles$Z.active]: active2,
18473
18609
  [styles$Z.disabled]: !enabled2
18474
18610
  }),
18475
- onClick: (event) => {
18476
- if (!enabled2) {
18477
- event.preventDefault();
18478
- event.stopPropagation();
18479
- return;
18480
- }
18481
- event.stopPropagation();
18482
- if (enabled2) {
18483
- onClick(event);
18484
- }
18485
- },
18486
18611
  ref,
18612
+ onClick: handleClick,
18613
+ onKeyDown: handleKeyDown,
18614
+ role: "menuitem",
18615
+ tabIndex: enabled2 ? 0 : -1,
18487
18616
  children: [
18488
18617
  iconToStart && icon2,
18489
18618
  /* @__PURE__ */ jsx("div", { className: styles$Z.wrapper, children: label2 ?? children }),
@@ -18492,17 +18621,38 @@ const MenuItem = forwardRef(function MenuItem2({
18492
18621
  }
18493
18622
  );
18494
18623
  });
18495
- const SubMenuItem = forwardRef(
18496
- function SubMenuItem2({ children, label: label2, triggerTemplate }, ref) {
18497
- const { root: root2 } = useTheme();
18498
- return /* @__PURE__ */ jsxs(ReactDropdownMenu.Sub, { children: [
18499
- /* @__PURE__ */ jsx(ReactDropdownMenu.SubTrigger, { className: styles$Z.DropdownMenuSubTrigger, asChild: true, ref, children: triggerTemplate ? triggerTemplate : /* @__PURE__ */ jsx("div", { children: label2 }) }),
18500
- /* @__PURE__ */ jsx(ReactDropdownMenu.Portal, { container: root2, children: /* @__PURE__ */ jsx(ReactDropdownMenu.SubContent, { className: styles$Z.DropdownMenuSubContent, children }) })
18501
- ] });
18502
- }
18503
- );
18624
+ const SubMenuItem = forwardRef(function SubMenuItem2({ children, label: label2, triggerTemplate }, ref) {
18625
+ const { root: root2 } = useTheme();
18626
+ const [open, setOpen] = useState(false);
18627
+ return /* @__PURE__ */ jsxs(Popover, { open, onOpenChange: setOpen, modal: false, children: [
18628
+ /* @__PURE__ */ jsx(PopoverTrigger, { asChild: true, children: /* @__PURE__ */ jsx(
18629
+ "div",
18630
+ {
18631
+ className: styles$Z.DropdownMenuSubTrigger,
18632
+ role: "menuitem",
18633
+ tabIndex: 0,
18634
+ ref,
18635
+ onMouseEnter: () => setOpen(true),
18636
+ onMouseLeave: () => setOpen(false),
18637
+ children: triggerTemplate ? triggerTemplate : /* @__PURE__ */ jsx("div", { children: label2 })
18638
+ }
18639
+ ) }),
18640
+ /* @__PURE__ */ jsx(Portal, { container: root2, children: /* @__PURE__ */ jsx(
18641
+ PopoverContent,
18642
+ {
18643
+ className: styles$Z.DropdownMenuSubContent,
18644
+ side: "right",
18645
+ align: "start",
18646
+ onMouseEnter: () => setOpen(true),
18647
+ onMouseLeave: () => setOpen(false),
18648
+ onOpenAutoFocus: (e) => e.preventDefault(),
18649
+ children
18650
+ }
18651
+ ) })
18652
+ ] });
18653
+ });
18504
18654
  const MenuSeparator = forwardRef(function MenuSeparator2(props, ref) {
18505
- return /* @__PURE__ */ jsx(ReactDropdownMenu.Separator, { ref, className: styles$Z.DropdownMenuSeparator, ...props });
18655
+ return /* @__PURE__ */ jsx("div", { ref, className: styles$Z.DropdownMenuSeparator, role: "separator", ...props });
18506
18656
  });
18507
18657
  const DDMCOMP = "DropdownMenu";
18508
18658
  const DropdownMenuMd = createMetadata({
@@ -31732,6 +31882,8 @@ const CompoundComponent = forwardRef(
31732
31882
  appContext,
31733
31883
  state,
31734
31884
  lookupAction,
31885
+ contextVars,
31886
+ // Extract contextVars to prevent it from being passed to DOM elements
31735
31887
  ...restProps
31736
31888
  }, forwardedRef) => {
31737
31889
  const resolvedPropsInner = useMemo(() => {
@@ -35263,9 +35415,10 @@ function isMediaBreakpoint(value) {
35263
35415
  }
35264
35416
  const tooltipBehavior = {
35265
35417
  name: "tooltip",
35266
- canAttach: (node) => {
35267
- const tooltipText = node.props?.tooltip;
35268
- const tooltipMarkdown = node.props?.tooltipMarkdown;
35418
+ canAttach: (context, node) => {
35419
+ const { extractValue } = context;
35420
+ const tooltipText = extractValue(node.props?.tooltip, true);
35421
+ const tooltipMarkdown = extractValue(node.props?.tooltipMarkdown, true);
35269
35422
  return !!tooltipText || !!tooltipMarkdown;
35270
35423
  },
35271
35424
  attach: (context, node, metadata) => {
@@ -35279,8 +35432,10 @@ const tooltipBehavior = {
35279
35432
  };
35280
35433
  const animationBehavior = {
35281
35434
  name: "animation",
35282
- canAttach: (node) => {
35283
- return !!node.props?.animation;
35435
+ canAttach: (context, node) => {
35436
+ const { extractValue } = context;
35437
+ const animation = extractValue(node.props?.animation, true);
35438
+ return !!animation;
35284
35439
  },
35285
35440
  attach: (context, node, metadata) => {
35286
35441
  const { extractValue } = context;
@@ -35294,10 +35449,13 @@ const animationBehavior = {
35294
35449
  };
35295
35450
  const labelBehavior = {
35296
35451
  name: "label",
35297
- canAttach: (node, metadata) => {
35452
+ canAttach: (context, node, metadata) => {
35298
35453
  if (metadata?.props?.label) {
35299
35454
  return false;
35300
- } else if (!node.props?.label) {
35455
+ }
35456
+ const { extractValue } = context;
35457
+ const label2 = extractValue(node.props?.label, true);
35458
+ if (!label2) {
35301
35459
  return false;
35302
35460
  }
35303
35461
  return true;
@@ -35334,14 +35492,15 @@ const labelBehavior = {
35334
35492
  };
35335
35493
  const variantBehavior = {
35336
35494
  name: "variant",
35337
- canAttach: (node) => {
35338
- const variant = node.props?.variant;
35495
+ canAttach: (context, node) => {
35496
+ const { extractValue } = context;
35497
+ const variant = extractValue(node.props?.variant, true);
35339
35498
  if (!variant) {
35340
35499
  return false;
35341
35500
  }
35342
35501
  if (node.type === "Button") {
35343
35502
  const variantStr = typeof variant === "string" ? variant : String(variant);
35344
- return !buttonVariantValues.includes(variantStr);
35503
+ return variantStr != void 0 && variantStr !== "" && !buttonVariantValues.includes(variantStr);
35345
35504
  }
35346
35505
  if (node.type === "Badge") {
35347
35506
  const variantStr = typeof variant === "string" ? variant : String(variant);
@@ -36567,7 +36726,7 @@ const defaultProps$o = {
36567
36726
  weekStartsOn: 0,
36568
36727
  inline: true,
36569
36728
  clearable: false,
36570
- clearToInitialValue: true,
36729
+ clearToInitialValue: false,
36571
36730
  required: false,
36572
36731
  readOnly: false,
36573
36732
  autoFocus: false,
@@ -37709,7 +37868,7 @@ const defaultProps$n = {
37709
37868
  hour24: true,
37710
37869
  seconds: false,
37711
37870
  clearable: false,
37712
- clearToInitialValue: true,
37871
+ clearToInitialValue: false,
37713
37872
  required: false,
37714
37873
  readOnly: false,
37715
37874
  autoFocus: false,
@@ -43867,29 +44026,30 @@ const inspectButtonComponentRenderer = createComponentRenderer(
43867
44026
  }
43868
44027
  );
43869
44028
  const themeVars$4 = `'{"padding-NestedApp": "var(--xmlui-padding-NestedApp)", "paddingHorizontal-NestedApp": "var(--xmlui-paddingHorizontal-NestedApp, var(--xmlui-padding-NestedApp))", "paddingVertical-NestedApp": "var(--xmlui-paddingVertical-NestedApp, var(--xmlui-padding-NestedApp))", "paddingLeft-NestedApp": "var(--xmlui-paddingLeft-NestedApp, var(--xmlui-paddingHorizontal-NestedApp, var(--xmlui-padding-NestedApp)))", "paddingRight-NestedApp": "var(--xmlui-paddingRight-NestedApp, var(--xmlui-paddingHorizontal-NestedApp, var(--xmlui-padding-NestedApp)))", "paddingTop-NestedApp": "var(--xmlui-paddingTop-NestedApp, var(--xmlui-paddingVertical-NestedApp, var(--xmlui-padding-NestedApp)))", "paddingBottom-NestedApp": "var(--xmlui-paddingBottom-NestedApp, var(--xmlui-paddingVertical-NestedApp, var(--xmlui-padding-NestedApp)))", "border-NestedApp": "var(--xmlui-border-NestedApp)", "borderHorizontal-NestedApp": "var(--xmlui-borderHorizontal-NestedApp, var(--xmlui-border-NestedApp))", "borderVertical-NestedApp": "var(--xmlui-borderVertical-NestedApp, var(--xmlui-border-NestedApp))", "borderLeft-NestedApp": "var(--xmlui-borderLeft-NestedApp, var(--xmlui-borderHorizontal-NestedApp, var(--xmlui-border-NestedApp)))", "borderRight-NestedApp": "var(--xmlui-borderRight-NestedApp, var(--xmlui-borderHorizontal-NestedApp, var(--xmlui-border-NestedApp)))", "borderTop-NestedApp": "var(--xmlui-borderTop-NestedApp, var(--xmlui-borderVertical-NestedApp, var(--xmlui-border-NestedApp)))", "borderBottom-NestedApp": "var(--xmlui-borderBottom-NestedApp, var(--xmlui-borderVertical-NestedApp, var(--xmlui-border-NestedApp)))", "borderWidth-NestedApp": "var(--xmlui-borderWidth-NestedApp)", "borderHorizontalWidth-NestedApp": "var(--xmlui-borderHorizontalWidth-NestedApp, var(--xmlui-borderWidth-NestedApp))", "borderLeftWidth-NestedApp": "var(--xmlui-borderLeftWidth-NestedApp, var(--xmlui-borderHorizontalWidth-NestedApp, var(--xmlui-borderWidth-NestedApp)))", "borderRightWidth-NestedApp": "var(--xmlui-borderRightWidth-NestedApp, var(--xmlui-borderHorizontalWidth-NestedApp, var(--xmlui-borderWidth-NestedApp)))", "borderVerticalWidth-NestedApp": "var(--xmlui-borderVerticalWidth-NestedApp, var(--xmlui-borderWidth-NestedApp))", "borderTopWidth-NestedApp": "var(--xmlui-borderTopWidth-NestedApp, var(--xmlui-borderVerticalWidth-NestedApp, var(--xmlui-borderWidth-NestedApp)))", "borderBottomWidth-NestedApp": "var(--xmlui-borderBottomWidth-NestedApp, var(--xmlui-borderVerticalWidth-NestedApp, var(--xmlui-borderWidth-NestedApp)))", "borderStyle-NestedApp": "var(--xmlui-borderStyle-NestedApp)", "borderHorizontalStyle-NestedApp": "var(--xmlui-borderHorizontalStyle-NestedApp, var(--xmlui-borderStyle-NestedApp))", "borderLeftStyle-NestedApp": "var(--xmlui-borderLeftStyle-NestedApp, var(--xmlui-borderHorizontalStyle-NestedApp, var(--xmlui-borderStyle-NestedApp)))", "borderRightStyle-NestedApp": "var(--xmlui-borderRightStyle-NestedApp, var(--xmlui-borderHorizontalStyle-NestedApp, var(--xmlui-borderStyle-NestedApp)))", "borderVerticalStyle-NestedApp": "var(--xmlui-borderVerticalStyle-NestedApp, var(--xmlui-borderStyle-NestedApp))", "borderTopStyle-NestedApp": "var(--xmlui-borderTopStyle-NestedApp, var(--xmlui-borderVerticalStyle-NestedApp, var(--xmlui-borderStyle-NestedApp)))", "borderBottomStyle-NestedApp": "var(--xmlui-borderBottomStyle-NestedApp, var(--xmlui-borderVerticalStyle-NestedApp, var(--xmlui-borderStyle-NestedApp)))", "borderColor-NestedApp": "var(--xmlui-borderColor-NestedApp)", "borderHorizontalColor-NestedApp": "var(--xmlui-borderHorizontalColor-NestedApp, var(--xmlui-borderColor-NestedApp))", "borderLeftColor-NestedApp": "var(--xmlui-borderLeftColor-NestedApp, var(--xmlui-borderHorizontalColor-NestedApp, var(--xmlui-borderColor-NestedApp)))", "borderRightColor-NestedApp": "var(--xmlui-borderRightColor-NestedApp, var(--xmlui-borderHorizontalColor-NestedApp, var(--xmlui-borderColor-NestedApp)))", "borderVerticalColor-NestedApp": "var(--xmlui-borderVerticalColor-NestedApp, var(--xmlui-borderColor-NestedApp))", "borderTopColor-NestedApp": "var(--xmlui-borderTopColor-NestedApp, var(--xmlui-borderVerticalColor-NestedApp, var(--xmlui-borderColor-NestedApp)))", "borderBottomColor-NestedApp": "var(--xmlui-borderBottomColor-NestedApp, var(--xmlui-borderVerticalColor-NestedApp, var(--xmlui-borderColor-NestedApp)))", "borderStartStartRadius-NestedApp": "var(--xmlui-borderStartStartRadius-NestedApp, var(--xmlui-borderRadius-NestedApp))", "borderStartEndRadius-NestedApp": "var(--xmlui-borderStartEndRadius-NestedApp, var(--xmlui-borderRadius-NestedApp))", "borderEndStartRadius-NestedApp": "var(--xmlui-borderEndStartRadius-NestedApp, var(--xmlui-borderRadius-NestedApp))", "borderEndEndRadius-NestedApp": "var(--xmlui-borderEndEndRadius-NestedApp, var(--xmlui-borderRadius-NestedApp))", "textColor-header-NestedApp": "var(--xmlui-textColor-header-NestedApp)", "fontFamily-header-NestedApp": "var(--xmlui-fontFamily-header-NestedApp)", "fontSize-header-NestedApp": "var(--xmlui-fontSize-header-NestedApp)", "fontStyle-header-NestedApp": "var(--xmlui-fontStyle-header-NestedApp)", "fontVariant-header-NestedApp": "var(--xmlui-fontVariant-header-NestedApp)", "fontWeight-header-NestedApp": "var(--xmlui-fontWeight-header-NestedApp)", "fontStretch-header-NestedApp": "var(--xmlui-fontStretch-header-NestedApp)", "textDecorationLine-header-NestedApp": "var(--xmlui-textDecorationLine-header-NestedApp)", "textDecorationColor-header-NestedApp": "var(--xmlui-textDecorationColor-header-NestedApp)", "textDecorationStyle-header-NestedApp": "var(--xmlui-textDecorationStyle-header-NestedApp)", "textDecorationThickness-header-NestedApp": "var(--xmlui-textDecorationThickness-header-NestedApp)", "textUnderlineOffset-header-NestedApp": "var(--xmlui-textUnderlineOffset-header-NestedApp)", "lineHeight-header-NestedApp": "var(--xmlui-lineHeight-header-NestedApp)", "backgroundColor-header-NestedApp": "var(--xmlui-backgroundColor-header-NestedApp)", "textTransform-header-NestedApp": "var(--xmlui-textTransform-header-NestedApp)", "letterSpacing-header-NestedApp": "var(--xmlui-letterSpacing-header-NestedApp)", "wordSpacing-header-NestedApp": "var(--xmlui-wordSpacing-header-NestedApp)", "textShadow-header-NestedApp": "var(--xmlui-textShadow-header-NestedApp)", "textIndent-header-NestedApp": "var(--xmlui-textIndent-header-NestedApp)", "textAlign-header-NestedApp": "var(--xmlui-textAlign-header-NestedApp)", "textAlignLast-header-NestedApp": "var(--xmlui-textAlignLast-header-NestedApp)", "wordBreak-header-NestedApp": "var(--xmlui-wordBreak-header-NestedApp)", "wordWrap-header-NestedApp": "var(--xmlui-wordWrap-header-NestedApp)", "direction-header-NestedApp": "var(--xmlui-direction-header-NestedApp)", "writingMode-header-NestedApp": "var(--xmlui-writingMode-header-NestedApp)", "lineBreak-header-NestedApp": "var(--xmlui-lineBreak-header-NestedApp)", "backgroundColor-frame-NestedApp": "var(--xmlui-backgroundColor-frame-NestedApp)", "gap-frame-NestedApp": "var(--xmlui-gap-frame-NestedApp)", "marginTop-NestedApp": "var(--xmlui-marginTop-NestedApp)", "marginBottom-NestedApp": "var(--xmlui-marginBottom-NestedApp)", "boxShadow-NestedApp": "var(--xmlui-boxShadow-NestedApp)", "backgroundColor-viewControls-NestedApp": "var(--xmlui-backgroundColor-viewControls-NestedApp)", "borderRadius-viewControls-NestedApp": "var(--xmlui-borderRadius-viewControls-NestedApp)", "padding-viewControls-NestedApp": "var(--xmlui-padding-viewControls-NestedApp)", "paddingVertical-viewControls-button-NestedApp": "var(--xmlui-paddingVertical-viewControls-button-NestedApp)", "paddingHorizontal-viewControls-button-NestedApp": "var(--xmlui-paddingHorizontal-viewControls-button-NestedApp)", "borderRadius-NestedApp": "var(--xmlui-borderRadius-NestedApp)", "borderBottom-header-NestedApp": "var(--xmlui-borderBottom-header-NestedApp)", "height-logo-splitView-NestedApp": "var(--xmlui-height-logo-splitView-NestedApp)", "width-logo-splitView-NestedApp": "var(--xmlui-width-logo-splitView-NestedApp)", "width-controls-NestedApp": "var(--xmlui-width-controls-NestedApp)", "padding-button-splitView-NestedApp": "var(--xmlui-padding-button-splitView-NestedApp)", "width-button-splitView-NestedApp": "var(--xmlui-width-button-splitView-NestedApp)", "height-button-splitView-NestedApp": "var(--xmlui-height-button-splitView-NestedApp)", "backgroundColor-code-splitView-NestedApp": "var(--xmlui-backgroundColor-code-splitView-NestedApp)", "backgroundColor-button-splitView-NestedApp--active": "var(--xmlui-backgroundColor-button-splitView-NestedApp--active)", "color-button-splitView-NestedApp": "var(--xmlui-color-button-splitView-NestedApp)", "color-button-splitView-NestedApp--active": "var(--xmlui-color-button-splitView-NestedApp--active)", "borderRadius-button-splitView-NestedApp": "var(--xmlui-borderRadius-button-splitView-NestedApp)", "borderColor-button-splitView-NestedApp": "var(--xmlui-borderColor-button-splitView-NestedApp)", "color-loadingText-NestedApp": "var(--xmlui-color-loadingText-NestedApp)"}'`;
43870
- const nestedAppPlaceholder = "_nestedAppPlaceholder_2bz33_14";
43871
- const loadingContainer = "_loadingContainer_2bz33_21";
43872
- const logoWrapper = "_logoWrapper_2bz33_34";
43873
- const animatedLogoPath = "_animatedLogoPath_2bz33_39";
43874
- const loadingText = "_loadingText_2bz33_47";
43875
- const nestedAppRoot = "_nestedAppRoot_2bz33_71";
43876
- const shouldAnimate = "_shouldAnimate_2bz33_79";
43877
- const initialized = "_initialized_2bz33_83";
43878
- const nestedAppContainer = "_nestedAppContainer_2bz33_90";
43879
- const contentContainer = "_contentContainer_2bz33_109";
43880
- const splitViewMarkdown = "_splitViewMarkdown_2bz33_116";
43881
- const hidden = "_hidden_2bz33_125";
43882
- const viewControls = "_viewControls_2bz33_134";
43883
- const logo = "_logo_2bz33_34";
43884
- const splitViewButton = "_splitViewButton_2bz33_146";
43885
- const show = "_show_2bz33_154";
43886
- const hide = "_hide_2bz33_161";
43887
- const header = "_header_2bz33_167";
43888
- const headerText = "_headerText_2bz33_175";
43889
- const headerButton = "_headerButton_2bz33_204";
43890
- const wrapper$3 = "_wrapper_2bz33_211";
43891
- const shadowRoot = "_shadowRoot_2bz33_214";
43892
- const content$1 = "_content_2bz33_109";
44029
+ const nestedAppPlaceholder = "_nestedAppPlaceholder_1n7j8_14";
44030
+ const loadingContainer = "_loadingContainer_1n7j8_21";
44031
+ const logoWrapper = "_logoWrapper_1n7j8_34";
44032
+ const animatedLogoPath = "_animatedLogoPath_1n7j8_39";
44033
+ const loadingText = "_loadingText_1n7j8_47";
44034
+ const nestedAppRoot = "_nestedAppRoot_1n7j8_71";
44035
+ const shouldAnimate = "_shouldAnimate_1n7j8_79";
44036
+ const initialized = "_initialized_1n7j8_83";
44037
+ const nestedAppContainer = "_nestedAppContainer_1n7j8_90";
44038
+ const contentContainer = "_contentContainer_1n7j8_109";
44039
+ const splitViewMarkdown = "_splitViewMarkdown_1n7j8_116";
44040
+ const hidden = "_hidden_1n7j8_125";
44041
+ const viewControls = "_viewControls_1n7j8_134";
44042
+ const logo = "_logo_1n7j8_34";
44043
+ const splitViewButton = "_splitViewButton_1n7j8_146";
44044
+ const show = "_show_1n7j8_154";
44045
+ const hide = "_hide_1n7j8_161";
44046
+ const header = "_header_1n7j8_167";
44047
+ const headerText = "_headerText_1n7j8_175";
44048
+ const headerButton = "_headerButton_1n7j8_204";
44049
+ const wrapper$3 = "_wrapper_1n7j8_211";
44050
+ const controlWrapper = "_controlWrapper_1n7j8_214";
44051
+ const shadowRoot = "_shadowRoot_1n7j8_219";
44052
+ const content$1 = "_content_1n7j8_109";
43893
44053
  const styles$e = {
43894
44054
  themeVars: themeVars$4,
43895
44055
  nestedAppPlaceholder,
@@ -43913,12 +44073,14 @@ const styles$e = {
43913
44073
  headerText,
43914
44074
  headerButton,
43915
44075
  wrapper: wrapper$3,
44076
+ controlWrapper,
43916
44077
  shadowRoot,
43917
44078
  content: content$1
43918
44079
  };
43919
44080
  const defaultProps$c = {
43920
44081
  allowPlaygroundPopup: true,
43921
44082
  withFrame: true,
44083
+ allowReset: true,
43922
44084
  components: EMPTY_ARRAY
43923
44085
  };
43924
44086
  const COMP$f = "NestedApp";
@@ -44059,6 +44221,11 @@ It supports both side-by-side and stacked layouts.`,
44059
44221
  description: "This property defines whether the nested app should be displayed with a frame.",
44060
44222
  valueType: "boolean",
44061
44223
  defaultValue: defaultProps$c.withFrame
44224
+ },
44225
+ allowReset: {
44226
+ description: "This property defines whether the reset button should be displayed in the header.",
44227
+ valueType: "boolean",
44228
+ defaultValue: defaultProps$c.allowReset
44062
44229
  }
44063
44230
  },
44064
44231
  themeVars: parseScssVar(styles$d.themeVars),
@@ -44098,7 +44265,8 @@ const appWithCodeViewComponentRenderer = createComponentRenderer(
44098
44265
  title: extractValue(node.props?.title),
44099
44266
  height: extractValue(node.props?.height),
44100
44267
  allowPlaygroundPopup: extractValue.asOptionalBoolean(node.props?.allowPlaygroundPopup),
44101
- withFrame: extractValue.asOptionalBoolean(node.props?.withFrame)
44268
+ withFrame: extractValue.asOptionalBoolean(node.props?.withFrame),
44269
+ allowReset: extractValue.asOptionalBoolean(node.props?.allowReset)
44102
44270
  }
44103
44271
  );
44104
44272
  }
@@ -47912,7 +48080,7 @@ function IconProvider({ children }) {
47912
48080
  /* @__PURE__ */ jsx("svg", { style: { display: "none" }, ref: spriteRootRef })
47913
48081
  ] });
47914
48082
  }
47915
- const version = "0.11.10";
48083
+ const version = "0.11.12";
47916
48084
  const miscellaneousUtils = {
47917
48085
  capitalize,
47918
48086
  pluralize: pluralize$1,
@@ -51366,9 +51534,6 @@ const ComponentAdapter = forwardRef(function ComponentAdapter2({
51366
51534
  (url) => {
51367
51535
  const extractedUrl = valueExtractor(url);
51368
51536
  if (typeof extractedUrl !== "string" || extractedUrl.trim() === "") {
51369
- console.warn(
51370
- `Component '${safeNode.type}': the extracted resource URL is not a valid string: value ${extractedUrl}, type ${typeof extractedUrl}`
51371
- );
51372
51537
  return void 0;
51373
51538
  }
51374
51539
  return getResourceUrl(extractedUrl);
@@ -51433,7 +51598,7 @@ const ComponentAdapter = forwardRef(function ComponentAdapter2({
51433
51598
  const behaviors = componentRegistry.getBehaviors();
51434
51599
  if (!isCompoundComponent) {
51435
51600
  for (const behavior of behaviors) {
51436
- if (behavior.canAttach(rendererContext.node, descriptor)) {
51601
+ if (behavior.canAttach(rendererContext, rendererContext.node, descriptor)) {
51437
51602
  renderedNode = behavior.attach(rendererContext, renderedNode, descriptor);
51438
51603
  }
51439
51604
  }
@@ -52489,7 +52654,7 @@ const ComponentViewer = () => {
52489
52654
  return "";
52490
52655
  }
52491
52656
  const { start: start2, end: end2, fileId } = compSrc;
52492
- const slicedSrc = sources[fileId].slice(start2, end2);
52657
+ const slicedSrc = sources[fileId].slice(start2, end2).replace(/inspect[\s\n]*=[\s\n]*"true"[\s\n]*/g, "");
52493
52658
  let dropEmptyLines = true;
52494
52659
  const prunedLines = [];
52495
52660
  let trimBeginCount = void 0;
@@ -52505,7 +52670,7 @@ const ComponentViewer = () => {
52505
52670
  }
52506
52671
  }
52507
52672
  });
52508
- return prunedLines.map((line2) => line2.slice(trimBeginCount).replace(/inspect="true"/g, "")).join("\n");
52673
+ return prunedLines.map((line2) => line2.slice(trimBeginCount)).join("\n");
52509
52674
  }, [inspectedNode2, sources]);
52510
52675
  return define_process_env_default$2.VITE_USER_COMPONENTS_Inspect !== "false" && isOpen && inspectedNode2 !== null ? /* @__PURE__ */ jsx(InspectorDialog, { isOpen, setIsOpen, clickPosition, children: /* @__PURE__ */ jsx(
52511
52676
  AppWithCodeViewNative,
@@ -52515,6 +52680,7 @@ const ComponentViewer = () => {
52515
52680
  initiallyShowCode: appGlobals?.initiallyShowCode ?? true,
52516
52681
  splitView: true,
52517
52682
  controlsWidth: "120px",
52683
+ allowReset: false,
52518
52684
  closeButton: /* @__PURE__ */ jsx(
52519
52685
  Tooltip$1,
52520
52686
  {
@@ -55564,7 +55730,7 @@ function ApiInterceptorProvider({
55564
55730
  return;
55565
55731
  }
55566
55732
  void (async () => {
55567
- const { initMock } = await import("./initMock-JW5A3SpD.js");
55733
+ const { initMock } = await import("./initMock-Dm6pyFPh.js");
55568
55734
  const apiInstance2 = await initMock(interceptor);
55569
55735
  setApiInstance(apiInstance2);
55570
55736
  setInitialized(true);
@@ -55581,7 +55747,7 @@ function ApiInterceptorProvider({
55581
55747
  if (define_process_env_default.VITE_MOCK_ENABLED) {
55582
55748
  const [{ createApiInterceptorWorker }, { initMock }] = await Promise.all([
55583
55749
  useWorker ? import("./apiInterceptorWorker-Wgm2_zjg.js") : Promise.resolve({ createApiInterceptorWorker: () => null }),
55584
- import("./initMock-JW5A3SpD.js")
55750
+ import("./initMock-Dm6pyFPh.js")
55585
55751
  ]);
55586
55752
  if (interceptor || forceInitialize) {
55587
55753
  const apiInstance2 = await initMock(interceptor || {});
@@ -55618,7 +55784,7 @@ function ApiInterceptorProvider({
55618
55784
  void (async () => {
55619
55785
  const [{ createApiInterceptorWorker }, { initMock }] = await Promise.all([
55620
55786
  import("./apiInterceptorWorker-Wgm2_zjg.js"),
55621
- import("./initMock-JW5A3SpD.js")
55787
+ import("./initMock-Dm6pyFPh.js")
55622
55788
  ]);
55623
55789
  const apiInstance2 = await initMock(interceptor);
55624
55790
  await createApiInterceptorWorker(apiInstance2, parentInterceptorWorker);
@@ -55943,6 +56109,7 @@ function AppWithCodeViewNative({
55943
56109
  markdown: markdown2,
55944
56110
  splitView,
55945
56111
  withFrame = true,
56112
+ allowReset = true,
55946
56113
  noHeader = false,
55947
56114
  initiallyShowCode = false,
55948
56115
  popOutUrl,
@@ -56025,7 +56192,7 @@ function AppWithCodeViewNative({
56025
56192
  )
56026
56193
  ] })
56027
56194
  ] }),
56028
- /* @__PURE__ */ jsxs("div", { className: styles$e.wrapper, style: { width: controlsWidth }, children: [
56195
+ /* @__PURE__ */ jsxs("div", { className: styles$e.controlWrapper, style: { width: controlsWidth }, children: [
56029
56196
  allowPlaygroundPopup && /* @__PURE__ */ jsx(
56030
56197
  Tooltip$1,
56031
56198
  {
@@ -56042,7 +56209,7 @@ function AppWithCodeViewNative({
56042
56209
  label: "View and edit in new full-width window"
56043
56210
  }
56044
56211
  ),
56045
- /* @__PURE__ */ jsx(
56212
+ allowReset && /* @__PURE__ */ jsx(
56046
56213
  Tooltip$1,
56047
56214
  {
56048
56215
  trigger: /* @__PURE__ */ jsx(
@@ -58577,7 +58744,10 @@ const collectedThemes = {
58577
58744
  xmluiOrange: XmlUiOrangeThemeDefinition,
58578
58745
  xmluiPurple: XmlUiPurpleThemeDefinition,
58579
58746
  xmluiCyan: XmlUiCyanThemeDefinition,
58580
- xmluiRed: XmlUiRedThemeDefinition
58747
+ xmluiRed: XmlUiRedThemeDefinition,
58748
+ xmluiDocs: XmlUiDocsThemeDefinition,
58749
+ xmluiBlog: XmlUiBlogThemeDefinition,
58750
+ xmluiWeb: XmlUiWebThemeDefinition
58581
58751
  };
58582
58752
  export {
58583
58753
  ThrowStatementError as T,