xmlui 0.11.15 → 0.11.17

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.
@@ -10,7 +10,7 @@ import produce, { createDraft, finishDraft, enableMapSet } from "immer";
10
10
  import { throttle, get, isNil, omitBy, isUndefined, isString, isPlainObject, noop as noop$2, isEmpty, isEqual, union, uniq, orderBy as orderBy$1, isObject, isArray, groupBy, sortBy, omit, isNumber, 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
12
  import classnames from "classnames";
13
- import { c as PART_LABELED_ITEM, d as PART_LABEL, b as PART_INPUT, P as PART_START_ADORNMENT, a as PART_END_ADORNMENT, x as xmlUiMarkupToComponent, e as errReportComponent, f as errReportMessage, g as errReportScriptError, h as errReportModuleErrors } from "./xmlui-parser-CW8YmGjO.js";
13
+ import { c as PART_LABELED_ITEM, d as PART_LABEL, b as PART_INPUT, e as PART_ICON, P as PART_START_ADORNMENT, a as PART_END_ADORNMENT, x as xmlUiMarkupToComponent, f as errReportComponent, g as errReportMessage, h as errReportScriptError, i as errReportModuleErrors } from "./xmlui-parser-9Yk-asFP.js";
14
14
  import Color from "color";
15
15
  import { Popover, PopoverTrigger, Portal, PopoverContent, PopoverPortal } from "@radix-ui/react-popover";
16
16
  import * as VisuallyHidden$1 from "@radix-ui/react-visually-hidden";
@@ -807,6 +807,9 @@ const styles$1j = {
807
807
  "lds-ring": "_lds-ring_b1pgc_14",
808
808
  fullScreenSpinnerWrapper
809
809
  };
810
+ const Part = ({ children, partId }) => {
811
+ return /* @__PURE__ */ jsx(Slot, { "data-part-id": partId, children });
812
+ };
810
813
  const PART_RING = "ring";
811
814
  const defaultProps$1i = {
812
815
  delay: 400,
@@ -846,7 +849,7 @@ const Spinner = forwardRef(function Spinner2({
846
849
  style: style2,
847
850
  ref: forwardedRef,
848
851
  children: [
849
- /* @__PURE__ */ jsx("div", { "data-part-id": PART_RING }),
852
+ /* @__PURE__ */ jsx(Part, { partId: PART_RING, children: /* @__PURE__ */ jsx("div", {}) }),
850
853
  /* @__PURE__ */ jsx("div", {}),
851
854
  /* @__PURE__ */ jsx("div", {}),
852
855
  /* @__PURE__ */ jsx("div", {})
@@ -866,7 +869,7 @@ const Spinner = forwardRef(function Spinner2({
866
869
  style: style2,
867
870
  ref: forwardedRef,
868
871
  children: [
869
- /* @__PURE__ */ jsx("div", { "data-part-id": PART_RING }),
872
+ /* @__PURE__ */ jsx(Part, { partId: PART_RING, children: /* @__PURE__ */ jsx("div", {}) }),
870
873
  /* @__PURE__ */ jsx("div", {}),
871
874
  /* @__PURE__ */ jsx("div", {}),
872
875
  /* @__PURE__ */ jsx("div", {})
@@ -904,18 +907,17 @@ const ItemWithLabel = forwardRef(function ItemWithLabel2({
904
907
  const generatedId2 = useId();
905
908
  const inputId = id || generatedId2;
906
909
  if (label2 === void 0 && !validationResult) {
907
- return /* @__PURE__ */ jsx(
910
+ return /* @__PURE__ */ jsx(Part, { partId: PART_LABELED_ITEM, children: /* @__PURE__ */ jsx(
908
911
  Slot,
909
912
  {
910
913
  ...rest,
911
- "data-part-id": PART_LABELED_ITEM,
912
914
  style: style2,
913
915
  className,
914
916
  id: inputId,
915
917
  ref,
916
918
  children
917
919
  }
918
- );
920
+ ) });
919
921
  }
920
922
  return /* @__PURE__ */ jsxs("div", { ...rest, ref, style: style2, className: classnames(className, styles$1k.itemWithLabel), children: [
921
923
  /* @__PURE__ */ jsxs(
@@ -929,10 +931,9 @@ const ItemWithLabel = forwardRef(function ItemWithLabel2({
929
931
  [styles$1k.shrinkToLabel]: shrinkToLabel2
930
932
  }),
931
933
  children: [
932
- label2 && /* @__PURE__ */ jsxs(
934
+ label2 && /* @__PURE__ */ jsx(Part, { partId: PART_LABEL, children: /* @__PURE__ */ jsxs(
933
935
  "label",
934
936
  {
935
- "data-part-id": PART_LABEL,
936
937
  htmlFor: inputId,
937
938
  onClick: onLabelClick || (() => document.getElementById(inputId)?.focus()),
938
939
  style: {
@@ -957,13 +958,12 @@ const ItemWithLabel = forwardRef(function ItemWithLabel2({
957
958
  )
958
959
  ]
959
960
  }
960
- ),
961
- cloneElement(children, {
961
+ ) }),
962
+ /* @__PURE__ */ jsx(Part, { partId: PART_LABELED_ITEM, children: cloneElement(children, {
962
963
  id: !isInputTemplateUsed ? inputId : void 0,
963
964
  style: void 0,
964
- className: void 0,
965
- "data-part-id": PART_LABELED_ITEM
966
- })
965
+ className: void 0
966
+ }) })
967
967
  ]
968
968
  }
969
969
  ),
@@ -1721,15 +1721,15 @@ const styles$1i = {
1721
1721
  overflowDropdown
1722
1722
  };
1723
1723
  const themeVars$_ = `'{"backgroundColor-DropdownMenu": "var(--xmlui-backgroundColor-DropdownMenu)", "borderRadius-DropdownMenu": "var(--xmlui-borderRadius-DropdownMenu)", "boxShadow-DropdownMenu": "var(--xmlui-boxShadow-DropdownMenu)", "borderColor-DropdownMenu-content": "var(--xmlui-borderColor-DropdownMenu-content)", "borderWidth-DropdownMenu-content": "var(--xmlui-borderWidth-DropdownMenu-content)", "borderStyle-DropdownMenu-content": "var(--xmlui-borderStyle-DropdownMenu-content)", "minWidth-DropdownMenu": "var(--xmlui-minWidth-DropdownMenu)", "backgroundColor-MenuItem": "var(--xmlui-backgroundColor-MenuItem)", "color-MenuItem": "var(--xmlui-color-MenuItem)", "fontFamily-MenuItem": "var(--xmlui-fontFamily-MenuItem)", "gap-MenuItem": "var(--xmlui-gap-MenuItem)", "fontSize-MenuItem": "var(--xmlui-fontSize-MenuItem)", "paddingVertical-MenuItem": "var(--xmlui-paddingVertical-MenuItem)", "paddingHorizontal-MenuItem": "var(--xmlui-paddingHorizontal-MenuItem)", "backgroundColor-MenuItem--hover": "var(--xmlui-backgroundColor-MenuItem--hover)", "backgroundColor-MenuItem--active": "var(--xmlui-backgroundColor-MenuItem--active)", "backgroundColor-MenuItem--active--hover": "var(--xmlui-backgroundColor-MenuItem--active--hover)", "color-MenuItem--hover": "var(--xmlui-color-MenuItem--hover)", "color-MenuItem--active": "var(--xmlui-color-MenuItem--active)", "color-MenuItem--active--hover": "var(--xmlui-color-MenuItem--active--hover)", "color-MenuItem--disabled": "var(--xmlui-color-MenuItem--disabled)", "marginTop-MenuSeparator": "var(--xmlui-marginTop-MenuSeparator)", "marginBottom-MenuSeparator": "var(--xmlui-marginBottom-MenuSeparator)", "width-MenuSeparator": "var(--xmlui-width-MenuSeparator)", "height-MenuSeparator": "var(--xmlui-height-MenuSeparator)", "color-MenuSeparator": "var(--xmlui-color-MenuSeparator)"}'`;
1724
- const DropdownMenuContent = "_DropdownMenuContent_tklrk_14";
1725
- const compact = "_compact_tklrk_18";
1726
- const DropdownMenuSubContent = "_DropdownMenuSubContent_tklrk_22";
1727
- const DropdownMenuItem = "_DropdownMenuItem_tklrk_32";
1728
- const DropdownMenuSubTrigger = "_DropdownMenuSubTrigger_tklrk_33";
1729
- const active$3 = "_active_tklrk_56";
1730
- const disabled$b = "_disabled_tklrk_66";
1731
- const wrapper$m = "_wrapper_tklrk_81";
1732
- const DropdownMenuSeparator = "_DropdownMenuSeparator_tklrk_85";
1724
+ const DropdownMenuContent = "_DropdownMenuContent_wsn5i_14";
1725
+ const compact = "_compact_wsn5i_19";
1726
+ const DropdownMenuSubContent = "_DropdownMenuSubContent_wsn5i_23";
1727
+ const DropdownMenuItem = "_DropdownMenuItem_wsn5i_33";
1728
+ const DropdownMenuSubTrigger = "_DropdownMenuSubTrigger_wsn5i_34";
1729
+ const active$3 = "_active_wsn5i_57";
1730
+ const disabled$b = "_disabled_wsn5i_67";
1731
+ const wrapper$m = "_wrapper_wsn5i_82";
1732
+ const DropdownMenuSeparator = "_DropdownMenuSeparator_wsn5i_86";
1733
1733
  const styles$1h = {
1734
1734
  themeVars: themeVars$_,
1735
1735
  DropdownMenuContent,
@@ -3496,7 +3496,9 @@ const DropdownMenu = forwardRef(function DropdownMenu2({
3496
3496
  ref: contentRef,
3497
3497
  align: alignment,
3498
3498
  style: style2,
3499
- className: classnames(styles$1h.DropdownMenuContent, className, { [styles$1h.compact]: compact2 }),
3499
+ className: classnames(styles$1h.DropdownMenuContent, className, {
3500
+ [styles$1h.compact]: compact2
3501
+ }),
3500
3502
  onOpenAutoFocus: (e) => {
3501
3503
  e.preventDefault();
3502
3504
  contentRef.current?.focus();
@@ -3619,7 +3621,7 @@ const ResponsiveBarDropdown = ({
3619
3621
  className,
3620
3622
  onWillOpen,
3621
3623
  registerComponentApi
3622
- }) => /* @__PURE__ */ jsx("div", { className, "data-part-id": PART_OVERFLOW, children: /* @__PURE__ */ jsx(
3624
+ }) => /* @__PURE__ */ jsx(Part, { partId: PART_OVERFLOW, children: /* @__PURE__ */ jsx("div", { className, children: /* @__PURE__ */ jsx(
3623
3625
  DropdownMenu,
3624
3626
  {
3625
3627
  label: dropdownText,
@@ -3631,7 +3633,7 @@ const ResponsiveBarDropdown = ({
3631
3633
  registerComponentApi,
3632
3634
  children
3633
3635
  }
3634
- ) });
3636
+ ) }) });
3635
3637
  const defaultResponsiveBarProps = {
3636
3638
  overflowIcon: "ellipsisHorizontal:ResponsiveBar",
3637
3639
  dropdownText: "More options",
@@ -4361,42 +4363,32 @@ const TextArea = forwardRef(function TextArea2({
4361
4363
  autoComplete: "off"
4362
4364
  };
4363
4365
  if (resize2 === "both" || resize2 === "horizontal" || resize2 === "vertical") {
4364
- return /* @__PURE__ */ jsx(
4366
+ return /* @__PURE__ */ jsx(Part, { partId: PART_INPUT, children: /* @__PURE__ */ jsx(
4365
4367
  TextAreaResizable$1,
4366
4368
  {
4367
4369
  ...textareaProps,
4368
- "data-part-id": PART_INPUT,
4369
4370
  style: style2,
4370
4371
  className: classnames(classes),
4371
4372
  maxRows,
4372
4373
  minRows,
4373
4374
  rows
4374
4375
  }
4375
- );
4376
+ ) });
4376
4377
  }
4377
4378
  if (autoSize || !isNil(maxRows) || !isNil(minRows)) {
4378
- return /* @__PURE__ */ jsx(
4379
+ return /* @__PURE__ */ jsx(Part, { partId: PART_INPUT, children: /* @__PURE__ */ jsx(
4379
4380
  TextareaAutosize,
4380
4381
  {
4381
4382
  ...textareaProps,
4382
- "data-part-id": PART_INPUT,
4383
4383
  style: style2,
4384
4384
  className: classnames(classes),
4385
4385
  maxRows,
4386
4386
  minRows,
4387
4387
  rows
4388
4388
  }
4389
- );
4389
+ ) });
4390
4390
  }
4391
- return /* @__PURE__ */ jsx(
4392
- "textarea",
4393
- {
4394
- ...textareaProps,
4395
- "data-part-id": PART_INPUT,
4396
- rows,
4397
- className: classnames(classes)
4398
- }
4399
- );
4391
+ return /* @__PURE__ */ jsx(Part, { partId: PART_INPUT, children: /* @__PURE__ */ jsx("textarea", { ...textareaProps, rows, className: classnames(classes) }) });
4400
4392
  });
4401
4393
  const COMP$1u = "TextArea";
4402
4394
  const resizeOptionsMd = [
@@ -4987,17 +4979,16 @@ const AppHeader = ({
4987
4979
  [styles$1b.full]: !canRestrictContentWidth
4988
4980
  }),
4989
4981
  children: [
4990
- hasRegisteredNavPanel && /* @__PURE__ */ jsx(
4982
+ hasRegisteredNavPanel && /* @__PURE__ */ jsx(Part, { partId: PART_HAMBURGER, children: /* @__PURE__ */ jsx(
4991
4983
  Button,
4992
4984
  {
4993
- "data-part-id": PART_HAMBURGER,
4994
4985
  onClick: toggleDrawer,
4995
4986
  icon: /* @__PURE__ */ jsx(Icon, { name: "hamburger" }),
4996
4987
  variant: "ghost",
4997
4988
  className: styles$1b.drawerToggle,
4998
4989
  style: { color: "inherit", flexShrink: 0 }
4999
4990
  }
5000
- ),
4991
+ ) }),
5001
4992
  /* @__PURE__ */ jsx("div", { className: styles$1b.logoAndTitle, children: (showLogo || !effectiveNavPanelVisible) && (logoContent ? /* @__PURE__ */ jsxs(Fragment, { children: [
5002
4993
  /* @__PURE__ */ jsx("div", { className: styles$1b.customLogoContainer, children: logoContent }),
5003
4994
  safeLogoTitle
@@ -8490,6 +8481,11 @@ const COMP$1t = "NavLink";
8490
8481
  const NavLinkMd = createMetadata({
8491
8482
  status: "stable",
8492
8483
  description: "`NavLink` creates interactive navigation items that connect users to different destinations within an app or external URLs. It automatically indicates active states, supports custom icons and labels, and can execute custom actions instead of navigation when needed.",
8484
+ parts: {
8485
+ indicator: {
8486
+ description: "The active indicator within the NavLink component."
8487
+ }
8488
+ },
8493
8489
  props: {
8494
8490
  to: d(`This property defines the URL of the link.`),
8495
8491
  enabled: dEnabled(),
@@ -8624,16 +8620,16 @@ const LinkNative = forwardRef(function LinkNative2(props, forwardedRef) {
8624
8620
  [styles$17.disabled]: disabled2
8625
8621
  }),
8626
8622
  children: [
8627
- icon2 && /* @__PURE__ */ jsx("div", { className: styles$17.iconWrapper, children: /* @__PURE__ */ jsx(Icon, { name: icon2 }) }),
8623
+ icon2 && /* @__PURE__ */ jsx(Part, { partId: PART_ICON, children: /* @__PURE__ */ jsx("div", { className: styles$17.iconWrapper, children: /* @__PURE__ */ jsx(Icon, { name: icon2 }) }) }),
8628
8624
  children
8629
8625
  ]
8630
8626
  }
8631
8627
  );
8632
8628
  });
8633
8629
  function specifyTypes(props) {
8634
- const { target: target2, referrerPolicy } = props;
8630
+ const { target: target2, referrerPolicy, ...rest } = props;
8635
8631
  return {
8636
- ...props,
8632
+ ...rest,
8637
8633
  target: target2,
8638
8634
  referrerPolicy
8639
8635
  };
@@ -8642,6 +8638,11 @@ const COMP$1s = "Link";
8642
8638
  const LinkMd = createMetadata({
8643
8639
  status: "stable",
8644
8640
  description: "`Link` creates clickable navigation elements for internal app routes or external URLs. You can use the `label` and `icon` properties for simple text links, or embed custom components like buttons, cards, or complex layouts for rich interactive link presentations.",
8641
+ parts: {
8642
+ icon: {
8643
+ description: "The icon within the Link component."
8644
+ }
8645
+ },
8645
8646
  props: {
8646
8647
  to: d(
8647
8648
  "This property defines the URL of the link. If the value is not defined, the link cannot be activated."
@@ -10721,6 +10722,11 @@ const COMP$1p = "Button";
10721
10722
  const ButtonMd = createMetadata({
10722
10723
  status: "stable",
10723
10724
  description: "`Button` is the primary interactive component for triggering actions like form submissions, navigation, opening modals, and API calls. It supports multiple visual styles and sizes to match different UI contexts and importance levels.",
10725
+ parts: {
10726
+ icon: {
10727
+ description: "The icon displayed within the button, if any."
10728
+ }
10729
+ },
10724
10730
  props: {
10725
10731
  autoFocus: {
10726
10732
  description: "Indicates if the button should receive focus when the page loads.",
@@ -13654,12 +13660,11 @@ const Toggle = forwardRef(function Toggle2({
13654
13660
  }, [focus, registerComponentApi, setValue]);
13655
13661
  const input2 = useMemo(() => {
13656
13662
  const legitValue = transformToLegitValue(value);
13657
- return /* @__PURE__ */ jsx(
13663
+ return /* @__PURE__ */ jsx(Part, { partId: PART_INPUT, children: /* @__PURE__ */ jsx(
13658
13664
  "input",
13659
13665
  {
13660
13666
  ...rest,
13661
13667
  id,
13662
- "data-part-id": PART_INPUT,
13663
13668
  ref,
13664
13669
  type: "checkbox",
13665
13670
  role: variant,
@@ -13686,7 +13691,7 @@ const Toggle = forwardRef(function Toggle2({
13686
13691
  [styles$11.forceHover]: forceHover2
13687
13692
  })
13688
13693
  }
13689
- );
13694
+ ) });
13690
13695
  }, [
13691
13696
  rest,
13692
13697
  className,
@@ -14243,10 +14248,9 @@ const PaginationNative = forwardRef(function PaginationNative2({
14243
14248
  const visiblePages = getVisiblePages();
14244
14249
  const isFirstPage = currentPage === 0;
14245
14250
  const isLastPage = currentPage === totalPages - 1;
14246
- const buttonRow2 = /* @__PURE__ */ jsxs(
14251
+ const buttonRow2 = /* @__PURE__ */ jsx(Part, { partId: "pagination-controls", children: /* @__PURE__ */ jsxs(
14247
14252
  "ul",
14248
14253
  {
14249
- "data-component": `pagination-controls`,
14250
14254
  className: classnames(styles$10.buttonRow, {
14251
14255
  [styles$10.paginationListVertical]: orientation === "vertical"
14252
14256
  // layout is already horizontal by default
@@ -14356,37 +14360,30 @@ const PaginationNative = forwardRef(function PaginationNative2({
14356
14360
  ) })
14357
14361
  ]
14358
14362
  }
14359
- );
14360
- const pageSizeSelector = showPageSizeSelector && pageSizeOptions && pageSizeOptions.length > 1 && /* @__PURE__ */ jsx(
14361
- "div",
14363
+ ) });
14364
+ const pageSizeSelector = showPageSizeSelector && pageSizeOptions && pageSizeOptions.length > 1 && /* @__PURE__ */ jsx(Part, { partId: "page-size-selector-container", children: /* @__PURE__ */ jsx("div", { className: classnames(styles$10.selectorContainer), children: /* @__PURE__ */ jsx(
14365
+ ItemWithLabel,
14362
14366
  {
14363
- "data-component": `page-size-selector-container`,
14364
- className: classnames(styles$10.selectorContainer),
14367
+ id: `${id}-page-size-selector`,
14368
+ label: "Items per page",
14369
+ enabled: enabled2,
14370
+ style: style2,
14371
+ className,
14372
+ labelPosition: orientation === "vertical" ? "top" : "start",
14365
14373
  children: /* @__PURE__ */ jsx(
14366
- ItemWithLabel,
14374
+ "select",
14367
14375
  {
14368
14376
  id: `${id}-page-size-selector`,
14369
- label: "Items per page",
14370
- enabled: enabled2,
14371
- style: style2,
14372
- className,
14373
- labelPosition: orientation === "vertical" ? "top" : "start",
14374
- children: /* @__PURE__ */ jsx(
14375
- "select",
14376
- {
14377
- id: `${id}-page-size-selector`,
14378
- value: pageSize,
14379
- onChange: (e) => handlePageSizeChange(Number(e.target.value)),
14380
- disabled: !enabled2,
14381
- className: styles$10.pageSizeSelect,
14382
- children: pageSizeOptions.map((size) => /* @__PURE__ */ jsx("option", { value: size, children: size }, size))
14383
- }
14384
- )
14377
+ value: pageSize,
14378
+ onChange: (e) => handlePageSizeChange(Number(e.target.value)),
14379
+ disabled: !enabled2,
14380
+ className: styles$10.pageSizeSelect,
14381
+ children: pageSizeOptions.map((size) => /* @__PURE__ */ jsx("option", { value: size, children: size }, size))
14385
14382
  }
14386
14383
  )
14387
14384
  }
14388
- );
14389
- const pageInfo = showPageInfo && /* @__PURE__ */ jsx("div", { "data-component": `page-info`, className: classnames(styles$10.pageInfo), children: /* @__PURE__ */ jsxs(Text, { variant: "secondary", children: [
14385
+ ) }) });
14386
+ const pageInfo = showPageInfo && /* @__PURE__ */ jsx(Part, { partId: "page-info", children: /* @__PURE__ */ jsx("div", { className: classnames(styles$10.pageInfo), children: /* @__PURE__ */ jsxs(Text, { variant: "secondary", children: [
14390
14387
  "Page ",
14391
14388
  currentPageNumber,
14392
14389
  " of ",
@@ -14394,7 +14391,7 @@ const PaginationNative = forwardRef(function PaginationNative2({
14394
14391
  " (",
14395
14392
  itemCount,
14396
14393
  " items)"
14397
- ] }) });
14394
+ ] }) }) });
14398
14395
  return /* @__PURE__ */ jsxs(
14399
14396
  "nav",
14400
14397
  {
@@ -15207,6 +15204,15 @@ const COMP$1l = "Table";
15207
15204
  const TableMd = createMetadata({
15208
15205
  status: "stable",
15209
15206
  description: "`Table` presents structured data for viewing, sorting, selection, and interaction.",
15207
+ // NOTE: let's leave it like this for now, we'll expand later when the need arises
15208
+ parts: {
15209
+ table: {
15210
+ description: "The main table container."
15211
+ },
15212
+ pagination: {
15213
+ description: "The pagination controls container."
15214
+ }
15215
+ },
15210
15216
  props: {
15211
15217
  items: dInternal(
15212
15218
  `You can use \`items\` as an alias for the \`data\` property. When you bind the table to a data source (e.g. an API endpoint), the \`data\` acts as the property that accepts a URL to fetch information from an API. When both \`items\` and \`data\` are used, \`items\` has priority.`
@@ -16057,6 +16063,17 @@ const COMP$1g = "Card";
16057
16063
  const CardMd = createMetadata({
16058
16064
  status: "stable",
16059
16065
  description: "`Card` is a versatile container that groups related content with a visual boundary, typically featuring background color, padding, borders, and rounded corners. It's ideal for organizing information, creating sections, and establishing visual hierarchy in your interface.",
16066
+ parts: {
16067
+ avatar: {
16068
+ description: "The avatar displayed within the card, if any."
16069
+ },
16070
+ title: {
16071
+ description: "The title of the card."
16072
+ },
16073
+ subtitle: {
16074
+ description: "The subtitle of the card."
16075
+ }
16076
+ },
16060
16077
  props: {
16061
16078
  avatarUrl: {
16062
16079
  description: `The url for an avarar image. If not specified, but [\`showAvatar\`](#showAvatar) is true, ${COMP$1g} will show the first letters of the [\`title\`](#title).`,
@@ -16506,11 +16523,10 @@ const ModalDialog = React__default.forwardRef(
16506
16523
  if (!root2) {
16507
16524
  return null;
16508
16525
  }
16509
- const Content2 = /* @__PURE__ */ jsxs(
16526
+ const Content2 = /* @__PURE__ */ jsx(Part, { partId: PART_CONTENT, children: /* @__PURE__ */ jsxs(
16510
16527
  SheetPrimitive.Content,
16511
16528
  {
16512
16529
  ...rest,
16513
- "data-part-id": PART_CONTENT,
16514
16530
  className: classnames(
16515
16531
  {
16516
16532
  [styles$V.contentAnimation]: !externalAnimation
@@ -16526,7 +16542,7 @@ const ModalDialog = React__default.forwardRef(
16526
16542
  ref: composedRef,
16527
16543
  style: { ...style2, gap: void 0 },
16528
16544
  children: [
16529
- !!title2 && /* @__PURE__ */ jsx(SheetPrimitive.Title, { style: { marginTop: 0 }, children: /* @__PURE__ */ jsx("header", { id: "dialogTitle", className: styles$V.dialogTitle, "data-part-id": PART_TITLE, children: title2 }) }),
16545
+ !!title2 && /* @__PURE__ */ jsx(Part, { partId: PART_TITLE, children: /* @__PURE__ */ jsx(SheetPrimitive.Title, { style: { marginTop: 0 }, children: /* @__PURE__ */ jsx("header", { id: "dialogTitle", className: styles$V.dialogTitle, children: title2 }) }) }),
16530
16546
  /* @__PURE__ */ jsx("div", { className: styles$V.innerContent, style: { gap: style2?.gap }, children: /* @__PURE__ */ jsx(ModalVisibilityContext.Provider, { value: modalVisibilityContextValue, children }) }),
16531
16547
  closeButtonVisible && /* @__PURE__ */ jsx(SheetPrimitive.Close, { asChild: true, children: /* @__PURE__ */ jsx(
16532
16548
  Button,
@@ -16541,7 +16557,7 @@ const ModalDialog = React__default.forwardRef(
16541
16557
  ) })
16542
16558
  ]
16543
16559
  }
16544
- );
16560
+ ) });
16545
16561
  return /* @__PURE__ */ jsx(SheetPrimitive.Root, { open: isOpen, onOpenChange: (open) => open ? doOpen() : doClose(), children: /* @__PURE__ */ jsxs(SheetPrimitive.Portal, { container: root2, children: [
16546
16562
  isDialogRootInShadowDom && /*
16547
16563
  In the Shadow DOM we can omit the Dialog.Overlay,
@@ -17617,6 +17633,14 @@ const COMP$14 = "Splitter";
17617
17633
  const baseSplitterMd = createMetadata({
17618
17634
  status: "stable",
17619
17635
  description: "`Splitter` component divides a container into two resizable sections. These are are identified by their names: primary and secondary. They have a draggable bar between them. When only a single child is visible (due to conditional rendering with `when` attributes), the splitter bar is not displayed and the single panel stretches to fill the entire viewport of the splitter container.",
17636
+ parts: {
17637
+ primaryPanel: {
17638
+ description: "The primary section/panel of the `Splitter` component."
17639
+ },
17640
+ secondaryPanel: {
17641
+ description: "The secondary section/panel of the `Splitter` component."
17642
+ }
17643
+ },
17620
17644
  props: {
17621
17645
  swapped: {
17622
17646
  description: `This optional booelan property indicates whether the \`${COMP$14}\` sections are layed out as primary and secondary (\`false\`) or secondary and primary (\`true\`) from left to right.`,
@@ -17673,7 +17697,7 @@ const SplitterMd = {
17673
17697
  const HSplitterMd = { ...baseSplitterMd, specializedFrom: COMP$14 };
17674
17698
  const VSplitterMd = { ...baseSplitterMd, specializedFrom: COMP$14 };
17675
17699
  const DEFAULT_ORIENTATION = "vertical";
17676
- function renderSplitter({
17700
+ function SplitterRenderer({
17677
17701
  node,
17678
17702
  extractValue,
17679
17703
  className,
@@ -17689,7 +17713,7 @@ function renderSplitter({
17689
17713
  const rendered = renderChild2(node.children);
17690
17714
  return rendered ? [rendered] : [];
17691
17715
  }
17692
- return node.children.map((child, index) => renderChild2(child)).filter((child) => child !== null && child !== void 0).map((child, index) => React__default.cloneElement(child, { key: index }));
17716
+ return node.children.map((child) => renderChild2(child)).filter((child) => child !== null && child !== void 0).map((child, index) => React__default.cloneElement(child, { key: index }));
17693
17717
  }, [node.children, renderChild2]);
17694
17718
  const visibleChildCount = renderedChildren.length;
17695
17719
  return /* @__PURE__ */ jsx(
@@ -17713,7 +17737,7 @@ const splitterComponentRenderer = createComponentRenderer(
17713
17737
  COMP$14,
17714
17738
  SplitterMd,
17715
17739
  ({ node, extractValue, renderChild: renderChild2, className, lookupEventHandler }) => {
17716
- return renderSplitter({
17740
+ return SplitterRenderer({
17717
17741
  node,
17718
17742
  extractValue,
17719
17743
  className,
@@ -17726,7 +17750,7 @@ const vSplitterComponentRenderer = createComponentRenderer(
17726
17750
  "VSplitter",
17727
17751
  VSplitterMd,
17728
17752
  ({ node, extractValue, renderChild: renderChild2, className, lookupEventHandler }) => {
17729
- return renderSplitter({
17753
+ return SplitterRenderer({
17730
17754
  node,
17731
17755
  extractValue,
17732
17756
  className,
@@ -17740,7 +17764,7 @@ const hSplitterComponentRenderer = createComponentRenderer(
17740
17764
  "HSplitter",
17741
17765
  HSplitterMd,
17742
17766
  ({ node, extractValue, renderChild: renderChild2, className, lookupEventHandler }) => {
17743
- return renderSplitter({
17767
+ return SplitterRenderer({
17744
17768
  node,
17745
17769
  extractValue,
17746
17770
  className,
@@ -20209,21 +20233,12 @@ const TextBox = forwardRef(function TextBox2({
20209
20233
  onFocus: focus,
20210
20234
  style: { ...style2, gap },
20211
20235
  children: [
20212
- /* @__PURE__ */ jsx(
20213
- Adornment,
20214
- {
20215
- "data-part-id": PART_START_ADORNMENT,
20216
- text: startText,
20217
- iconName: startIcon,
20218
- className: classnames(styles$N.adornment)
20219
- }
20220
- ),
20221
- /* @__PURE__ */ jsx(
20236
+ /* @__PURE__ */ jsx(Part, { partId: PART_START_ADORNMENT, children: /* @__PURE__ */ jsx(Adornment, { text: startText, iconName: startIcon, className: classnames(styles$N.adornment) }) }),
20237
+ /* @__PURE__ */ jsx(Part, { partId: PART_INPUT, children: /* @__PURE__ */ jsx(
20222
20238
  "input",
20223
20239
  {
20224
20240
  id,
20225
20241
  ref: inputRef,
20226
- "data-part-id": PART_INPUT,
20227
20242
  type: actualType,
20228
20243
  className: classnames(styles$N.input, {
20229
20244
  [styles$N.readOnly]: readOnly2
@@ -20241,33 +20256,23 @@ const TextBox = forwardRef(function TextBox2({
20241
20256
  tabIndex: enabled2 ? tabIndex : -1,
20242
20257
  required: required2
20243
20258
  }
20244
- ),
20245
- !readOnly2 && enabled2 && type == "search" && localValue?.length > 0 && /* @__PURE__ */ jsx(
20259
+ ) }),
20260
+ !readOnly2 && enabled2 && type == "search" && localValue?.length > 0 && /* @__PURE__ */ jsx(Part, { partId: PART_END_ADORNMENT, children: /* @__PURE__ */ jsx(
20246
20261
  Adornment,
20247
20262
  {
20248
- "data-part-id": PART_END_ADORNMENT,
20249
20263
  iconName: "close",
20250
20264
  className: styles$N.adornment,
20251
20265
  onClick: () => updateValue("")
20252
20266
  }
20253
- ),
20254
- type === "password" && showPasswordToggle ? /* @__PURE__ */ jsx(
20267
+ ) }),
20268
+ type === "password" && showPasswordToggle ? /* @__PURE__ */ jsx(Part, { partId: PART_END_ADORNMENT, children: /* @__PURE__ */ jsx(
20255
20269
  Adornment,
20256
20270
  {
20257
- "data-part-id": PART_END_ADORNMENT,
20258
20271
  iconName: showPassword ? passwordVisibleIcon : passwordHiddenIcon,
20259
20272
  className: classnames(styles$N.adornment, styles$N.passwordToggle),
20260
20273
  onClick: togglePasswordVisibility
20261
20274
  }
20262
- ) : /* @__PURE__ */ jsx(
20263
- Adornment,
20264
- {
20265
- "data-part-id": PART_END_ADORNMENT,
20266
- text: endText,
20267
- iconName: endIcon,
20268
- className: styles$N.adornment
20269
- }
20270
- )
20275
+ ) }) : /* @__PURE__ */ jsx(Part, { partId: PART_END_ADORNMENT, children: /* @__PURE__ */ jsx(Adornment, { text: endText, iconName: endIcon, className: styles$N.adornment }) })
20271
20276
  ]
20272
20277
  }
20273
20278
  );
@@ -20909,20 +20914,11 @@ const NumberBox = forwardRef(function NumberBox2({
20909
20914
  },
20910
20915
  style: { ...style2, gap },
20911
20916
  children: [
20912
- /* @__PURE__ */ jsx(
20913
- Adornment,
20914
- {
20915
- "data-part-id": PART_START_ADORNMENT,
20916
- text: startText,
20917
- iconName: startIcon,
20918
- className: classnames(styles$K.adornment)
20919
- }
20920
- ),
20921
- /* @__PURE__ */ jsx(
20917
+ /* @__PURE__ */ jsx(Part, { partId: PART_START_ADORNMENT, children: /* @__PURE__ */ jsx(Adornment, { text: startText, iconName: startIcon, className: classnames(styles$K.adornment) }) }),
20918
+ /* @__PURE__ */ jsx(Part, { partId: PART_INPUT, children: /* @__PURE__ */ jsx(
20922
20919
  "input",
20923
20920
  {
20924
20921
  id,
20925
- "data-part-id": PART_INPUT,
20926
20922
  type: "text",
20927
20923
  inputMode: "numeric",
20928
20924
  className: classnames(styles$K.input, {
@@ -20944,21 +20940,12 @@ const NumberBox = forwardRef(function NumberBox2({
20944
20940
  maxLength,
20945
20941
  required: required2
20946
20942
  }
20947
- ),
20948
- /* @__PURE__ */ jsx(
20949
- Adornment,
20950
- {
20951
- "data-part-id": PART_END_ADORNMENT,
20952
- text: endText,
20953
- iconName: endIcon,
20954
- className: classnames(styles$K.adornment)
20955
- }
20956
- ),
20943
+ ) }),
20944
+ /* @__PURE__ */ jsx(Part, { partId: PART_END_ADORNMENT, children: /* @__PURE__ */ jsx(Adornment, { text: endText, iconName: endIcon, className: classnames(styles$K.adornment) }) }),
20957
20945
  hasSpinBox && /* @__PURE__ */ jsxs("div", { className: styles$K.spinnerBox, children: [
20958
- /* @__PURE__ */ jsx(
20946
+ /* @__PURE__ */ jsx(Part, { partId: PART_SPINNER_UP, children: /* @__PURE__ */ jsx(
20959
20947
  Button,
20960
20948
  {
20961
- "data-part-id": PART_SPINNER_UP,
20962
20949
  "data-spinner": "up",
20963
20950
  type: "button",
20964
20951
  role: "spinbutton",
@@ -20970,11 +20957,10 @@ const NumberBox = forwardRef(function NumberBox2({
20970
20957
  ref: upButton,
20971
20958
  children: /* @__PURE__ */ jsx(Icon, { name: spinnerUpIcon || "spinnerUp:NumberBox", fallback: "chevronup", size: "sm" })
20972
20959
  }
20973
- ),
20974
- /* @__PURE__ */ jsx(
20960
+ ) }),
20961
+ /* @__PURE__ */ jsx(Part, { partId: PART_SPINNER_DOWN, children: /* @__PURE__ */ jsx(
20975
20962
  Button,
20976
20963
  {
20977
- "data-part-id": PART_SPINNER_DOWN,
20978
20964
  "data-spinner": "down",
20979
20965
  type: "button",
20980
20966
  role: "spinbutton",
@@ -20993,7 +20979,7 @@ const NumberBox = forwardRef(function NumberBox2({
20993
20979
  }
20994
20980
  )
20995
20981
  }
20996
- )
20982
+ ) })
20997
20983
  ] })
20998
20984
  ]
20999
20985
  }
@@ -21177,7 +21163,7 @@ function HiddenOption(option) {
21177
21163
  return /* @__PURE__ */ jsx("div", { ref: (el) => setNode(el), style: { display: "none" }, children: option.children });
21178
21164
  }
21179
21165
  const PART_LIST_WRAPPER$1 = "listWrapper";
21180
- const PART_CLEAR_BUTTON$2 = "clearButton";
21166
+ const PART_CLEAR_BUTTON$1 = "clearButton";
21181
21167
  const defaultProps$G = {
21182
21168
  enabled: true,
21183
21169
  placeholder: "",
@@ -21243,10 +21229,9 @@ const SelectTriggerActions = ({
21243
21229
  }) => {
21244
21230
  const hasValue = multiSelect ? Array.isArray(value) && value.length > 0 : value !== void 0 && value !== null && value !== "";
21245
21231
  return /* @__PURE__ */ jsxs("div", { className: styles$J.actions, children: [
21246
- hasValue && enabled2 && !readOnly2 && clearable && /* @__PURE__ */ jsx(
21232
+ hasValue && enabled2 && !readOnly2 && clearable && /* @__PURE__ */ jsx(Part, { partId: PART_CLEAR_BUTTON$1, children: /* @__PURE__ */ jsx(
21247
21233
  "span",
21248
21234
  {
21249
- "data-part-id": PART_CLEAR_BUTTON$2,
21250
21235
  className: styles$J.action,
21251
21236
  onClick: (event) => {
21252
21237
  event.stopPropagation();
@@ -21254,7 +21239,7 @@ const SelectTriggerActions = ({
21254
21239
  },
21255
21240
  children: /* @__PURE__ */ jsx(Icon, { name: "close" })
21256
21241
  }
21257
- ),
21242
+ ) }),
21258
21243
  showChevron && /* @__PURE__ */ jsx("span", { className: styles$J.action, children: /* @__PURE__ */ jsx(Icon, { name: "chevrondown" }) })
21259
21244
  ] });
21260
21245
  };
@@ -21522,7 +21507,7 @@ const Select = forwardRef(function Select2({
21522
21507
  },
21523
21508
  modal: false,
21524
21509
  children: [
21525
- /* @__PURE__ */ jsxs(
21510
+ /* @__PURE__ */ jsx(Part, { partId: PART_LIST_WRAPPER$1, children: /* @__PURE__ */ jsxs(
21526
21511
  PopoverTrigger,
21527
21512
  {
21528
21513
  ...rest,
@@ -21534,7 +21519,6 @@ const Select = forwardRef(function Select2({
21534
21519
  onBlur,
21535
21520
  disabled: !enabled2,
21536
21521
  "aria-expanded": open,
21537
- "data-part-id": PART_LIST_WRAPPER$1,
21538
21522
  className: classnames(className, styles$J.selectTrigger, styles$J[validationStatus], {
21539
21523
  [styles$J.disabled]: !enabled2,
21540
21524
  [styles$J.multi]: multiSelect
@@ -21587,7 +21571,7 @@ const Select = forwardRef(function Select2({
21587
21571
  )
21588
21572
  ]
21589
21573
  }
21590
- ),
21574
+ ) }),
21591
21575
  open && /* @__PURE__ */ jsx(Portal, { container: root2, children: /* @__PURE__ */ jsx(
21592
21576
  PopoverContent,
21593
21577
  {
@@ -23002,10 +22986,9 @@ const Form = forwardRef(function({
23002
22986
  });
23003
22987
  });
23004
22988
  });
23005
- const cancelButton = cancelLabel === "" ? null : /* @__PURE__ */ jsx(
22989
+ const cancelButton = cancelLabel === "" ? null : /* @__PURE__ */ jsx(Part, { partId: PART_CANCEL_BUTTON, children: /* @__PURE__ */ jsx(
23006
22990
  Button,
23007
22991
  {
23008
- "data-part-id": PART_CANCEL_BUTTON,
23009
22992
  type: "button",
23010
22993
  themeColor: "secondary",
23011
22994
  variant: "ghost",
@@ -23013,18 +22996,9 @@ const Form = forwardRef(function({
23013
22996
  children: cancelLabel
23014
22997
  },
23015
22998
  "cancel"
23016
- );
22999
+ ) });
23017
23000
  const submitButton = useMemo(
23018
- () => /* @__PURE__ */ jsx(
23019
- Button,
23020
- {
23021
- "data-part-id": PART_SUBMIT_BUTTON,
23022
- type: "submit",
23023
- disabled: !isEnabled2 || !enableSubmit,
23024
- children: formState.submitInProgress ? saveInProgressLabel : saveLabel
23025
- },
23026
- "submit"
23027
- ),
23001
+ () => /* @__PURE__ */ jsx(Part, { partId: PART_SUBMIT_BUTTON, children: /* @__PURE__ */ jsx(Button, { type: "submit", disabled: !isEnabled2 || !enableSubmit, children: formState.submitInProgress ? saveInProgressLabel : saveLabel }, "submit") }),
23028
23002
  [isEnabled2, enableSubmit, formState.submitInProgress, saveInProgressLabel, saveLabel]
23029
23003
  );
23030
23004
  useEffect(() => {
@@ -23584,12 +23558,11 @@ const AutoComplete = forwardRef(function AutoComplete2({
23584
23558
  },
23585
23559
  modal: false,
23586
23560
  children: [
23587
- /* @__PURE__ */ jsx(PopoverTrigger, { asChild: true, ref: setReferenceElement, children: /* @__PURE__ */ jsxs(
23561
+ /* @__PURE__ */ jsx(Part, { partId: PART_LIST_WRAPPER, children: /* @__PURE__ */ jsx(PopoverTrigger, { asChild: true, ref: setReferenceElement, children: /* @__PURE__ */ jsxs(
23588
23562
  "div",
23589
23563
  {
23590
23564
  ref: forwardedRef,
23591
23565
  style: style2,
23592
- "data-part-id": PART_LIST_WRAPPER,
23593
23566
  className: classnames(
23594
23567
  className,
23595
23568
  styles$E.badgeListWrapper,
@@ -23624,7 +23597,7 @@ const AutoComplete = forwardRef(function AutoComplete2({
23624
23597
  )
23625
23598
  ] }, index)) }),
23626
23599
  /* @__PURE__ */ jsxs("div", { className: styles$E.inputWrapper, children: [
23627
- /* @__PURE__ */ jsx(
23600
+ /* @__PURE__ */ jsx(Part, { partId: PART_INPUT, children: /* @__PURE__ */ jsx(
23628
23601
  "input",
23629
23602
  {
23630
23603
  ...rest,
@@ -23660,7 +23633,6 @@ const AutoComplete = forwardRef(function AutoComplete2({
23660
23633
  setOpen(true);
23661
23634
  }
23662
23635
  },
23663
- "data-part-id": PART_INPUT,
23664
23636
  readOnly: readOnly2,
23665
23637
  autoFocus,
23666
23638
  "aria-autocomplete": "list",
@@ -23674,7 +23646,7 @@ const AutoComplete = forwardRef(function AutoComplete2({
23674
23646
  placeholder: !readOnly2 ? placeholder2 : "",
23675
23647
  className: styles$E.commandInput
23676
23648
  }
23677
- ),
23649
+ ) }),
23678
23650
  /* @__PURE__ */ jsxs("div", { className: styles$E.actions, children: [
23679
23651
  value?.length > 0 && enabled2 && !readOnly2 && /* @__PURE__ */ jsx(
23680
23652
  "span",
@@ -23703,7 +23675,7 @@ const AutoComplete = forwardRef(function AutoComplete2({
23703
23675
  ] })
23704
23676
  ]
23705
23677
  }
23706
- ) }),
23678
+ ) }) }),
23707
23679
  open && /* @__PURE__ */ jsx(Portal, { container: root2, children: /* @__PURE__ */ jsx(
23708
23680
  PopoverContent,
23709
23681
  {
@@ -24683,7 +24655,7 @@ function ApiInterceptorProvider({
24683
24655
  return;
24684
24656
  }
24685
24657
  void (async () => {
24686
- const { initMock } = await import("./initMock-C17fxLuA.js");
24658
+ const { initMock } = await import("./initMock-CnArkQw6.js");
24687
24659
  const apiInstance2 = await initMock(interceptor);
24688
24660
  setApiInstance(apiInstance2);
24689
24661
  setInitialized(true);
@@ -24700,7 +24672,7 @@ function ApiInterceptorProvider({
24700
24672
  if (process.env.VITE_MOCK_ENABLED) {
24701
24673
  const [{ createApiInterceptorWorker }, { initMock }] = await Promise.all([
24702
24674
  useWorker ? import("./apiInterceptorWorker-dwrAyq6l.js") : Promise.resolve({ createApiInterceptorWorker: () => null }),
24703
- import("./initMock-C17fxLuA.js")
24675
+ import("./initMock-CnArkQw6.js")
24704
24676
  ]);
24705
24677
  if (interceptor || forceInitialize) {
24706
24678
  const apiInstance2 = await initMock(interceptor || {});
@@ -24737,7 +24709,7 @@ function ApiInterceptorProvider({
24737
24709
  void (async () => {
24738
24710
  const [{ createApiInterceptorWorker }, { initMock }] = await Promise.all([
24739
24711
  import("./apiInterceptorWorker-dwrAyq6l.js"),
24740
- import("./initMock-C17fxLuA.js")
24712
+ import("./initMock-CnArkQw6.js")
24741
24713
  ]);
24742
24714
  const apiInstance2 = await initMock(interceptor);
24743
24715
  await createApiInterceptorWorker(apiInstance2, parentInterceptorWorker);
@@ -26907,7 +26879,6 @@ const ColorPicker = forwardRef(
26907
26879
  [styles$u.warning]: validationStatus === "warning",
26908
26880
  [styles$u.valid]: validationStatus === "valid"
26909
26881
  }),
26910
- "data-part-id": PART_INPUT,
26911
26882
  style: style2,
26912
26883
  disabled: !enabled2,
26913
26884
  onFocus: handleOnFocus,
@@ -28508,6 +28479,15 @@ const COMP$X = "Form";
28508
28479
  const FormMd = createMetadata({
28509
28480
  status: "stable",
28510
28481
  description: "`Form` provides a structured container for collecting and validating user input, with built-in data binding, validation, and submission handling. It automatically manages form state and provides context for nested form controls to work together.",
28482
+ parts: {
28483
+ buttonRow: {
28484
+ description: "The container for the form action buttons (e.g., Save, Cancel)."
28485
+ },
28486
+ // NOTE: There is a ValidationSummary in the form and also one in the modal dialog.
28487
+ validationSummary: {
28488
+ description: "The area displaying validation summary messages for the form."
28489
+ }
28490
+ },
28511
28491
  props: {
28512
28492
  buttonRowTemplate: dComponent(
28513
28493
  `This property allows defining a custom component to display the buttons at the bottom of the form.`
@@ -28731,6 +28711,12 @@ const NumberBoxMd = createMetadata({
28731
28711
  },
28732
28712
  input: {
28733
28713
  description: "The text box input area."
28714
+ },
28715
+ spinnerButtonUp: {
28716
+ description: "The spinner button for incrementing the value."
28717
+ },
28718
+ spinnerButtonDown: {
28719
+ description: "The spinner button for decrementing the value."
28734
28720
  }
28735
28721
  },
28736
28722
  props: {
@@ -29435,6 +29421,14 @@ const COMP$S = "NavPanel";
29435
29421
  const NavPanelMd = createMetadata({
29436
29422
  status: "stable",
29437
29423
  description: "`NavPanel` defines the navigation structure within an App, serving as a container for NavLink and NavGroup components that create your application's primary navigation menu. Its appearance and behavior automatically adapt based on the App's layout configuration.",
29424
+ parts: {
29425
+ logo: {
29426
+ description: "The logo area within the NavPanel component."
29427
+ },
29428
+ content: {
29429
+ description: "The content area within the NavPanel component."
29430
+ }
29431
+ },
29438
29432
  props: {
29439
29433
  logoTemplate: dComponent(
29440
29434
  `This property defines the logo template to display in the navigation panel with the \`vertical\` and \`vertical-sticky\` layout.`
@@ -29835,6 +29829,11 @@ const RGOption = `RadioGroupOption`;
29835
29829
  const RadioGroupMd = createMetadata({
29836
29830
  status: "stable",
29837
29831
  description: "`RadioGroup` creates a mutually exclusive selection interface where users can choose only one option from a group of radio buttons. It manages the selection state and ensures that selecting one option automatically deselects all others in the group.Radio options store their values as strings. Numbers and booleans are converted to strings when assigned, while objects, functions and arrays default to an empty string unless resolved via binding expressions.",
29832
+ parts: {
29833
+ label: {
29834
+ description: "The label displayed for the radio group."
29835
+ }
29836
+ },
29838
29837
  props: {
29839
29838
  initialValue: {
29840
29839
  ...dInitialValue(),
@@ -29964,6 +29963,14 @@ const DEFAULT_ICON = "browse:FileInput";
29964
29963
  const FileInputMd = createMetadata({
29965
29964
  status: "stable",
29966
29965
  description: "`FileInput` enables users to select files from their device's file system for upload or processing. It combines a text field displaying selected files with a customizable button that opens the system file browser. Use it for forms, media uploads, and document processing workflows.",
29966
+ parts: {
29967
+ label: {
29968
+ description: "The label displayed for the file input."
29969
+ },
29970
+ input: {
29971
+ description: "The file input area displaying selected file names."
29972
+ }
29973
+ },
29967
29974
  props: {
29968
29975
  placeholder: dPlaceholder(),
29969
29976
  initialValue: dInitialValue(),
@@ -30124,6 +30131,12 @@ const SelectMd = createMetadata({
30124
30131
  parts: {
30125
30132
  clearButton: {
30126
30133
  description: "The button to clear the selected value(s)."
30134
+ },
30135
+ item: {
30136
+ description: "Each option item within the Select component."
30137
+ },
30138
+ menu: {
30139
+ description: "The dropdown menu within the Select component."
30127
30140
  }
30128
30141
  },
30129
30142
  props: {
@@ -30777,6 +30790,11 @@ const DDMCOMP = "DropdownMenu";
30777
30790
  const DropdownMenuMd = createMetadata({
30778
30791
  status: "stable",
30779
30792
  description: "`DropdownMenu` provides a space-efficient way to present multiple options or actions through a collapsible interface. When clicked, the trigger button reveals a menu that can include items, separators, and nested submenus, making it ideal for navigation, action lists, or any situation requiring many options without permanent screen space.",
30793
+ parts: {
30794
+ content: {
30795
+ description: "The content area of the DropdownMenu where menu items are displayed."
30796
+ }
30797
+ },
30780
30798
  props: {
30781
30799
  label: dLabel(),
30782
30800
  triggerTemplate: dTriggerTemplate(DDMCOMP),
@@ -30984,6 +31002,11 @@ const COMP$E = "ExpandableItem";
30984
31002
  const ExpandableItemMd = createMetadata({
30985
31003
  status: "stable",
30986
31004
  description: "`ExpandableItem` creates expandable/collapsible section, similar to the HTML details disclosure element. When the user clicks on the `summary` the content expands or collapses.",
31005
+ parts: {
31006
+ summary: {
31007
+ description: "The summary section that is always visible and acts as the trigger."
31008
+ }
31009
+ },
30987
31010
  props: {
30988
31011
  summary: dComponent("The summary content that is always visible and acts as the trigger."),
30989
31012
  initiallyExpanded: {
@@ -32268,7 +32291,16 @@ const XmlUiBlogThemeDefinition = {
32268
32291
  id: "xmlui-blog",
32269
32292
  extends: "xmlui",
32270
32293
  color: "$color-primary-500",
32271
- themeVars: {}
32294
+ themeVars: {
32295
+ // --- App layout
32296
+ "maxWidth-content-App": "800px",
32297
+ // --- Fundamental colors & typography
32298
+ backgroundColor: "$color-surface-0",
32299
+ "fontWeight-Text": "400",
32300
+ "fontWeight-bold": "700",
32301
+ "textColor-primary": "$color-surface-800",
32302
+ "textColor-NavLink--active": "$color-primary"
32303
+ }
32272
32304
  };
32273
32305
  const XmlUiWebThemeDefinition = {
32274
32306
  id: "xmlui-web",
@@ -35307,7 +35339,7 @@ function InputDivider({
35307
35339
  const PART_DAY = "day";
35308
35340
  const PART_MONTH = "month";
35309
35341
  const PART_YEAR = "year";
35310
- const PART_CLEAR_BUTTON$1 = "clearButton";
35342
+ const PART_CLEAR_BUTTON = "clearButton";
35311
35343
  const MIN_YEAR = 1900;
35312
35344
  const MAX_YEAR = 2100;
35313
35345
  const dateFormats = [
@@ -35540,7 +35572,7 @@ const DateInput = forwardRef(function DateInputNative({
35540
35572
  }
35541
35573
  }
35542
35574
  },
35543
- [day2, month2, year2, handleChange, onInvalidChange]
35575
+ [day2, month2, year2, handleChange, onInvalidChange, formatDateValue]
35544
35576
  );
35545
35577
  const handleDayChange = useMemo(
35546
35578
  () => createInputChangeHandler(
@@ -35845,21 +35877,17 @@ const DateInput = forwardRef(function DateInputNative({
35845
35877
  startAdornment,
35846
35878
  /* @__PURE__ */ jsxs("div", { className: styles$p.wrapper, children: [
35847
35879
  /* @__PURE__ */ jsx("div", { className: styles$p.inputGroup, children: createDateInputs() }),
35848
- clearable && /* @__PURE__ */ jsx(
35880
+ clearable && /* @__PURE__ */ jsx(Part, { partId: PART_CLEAR_BUTTON, children: /* @__PURE__ */ jsx(
35849
35881
  "button",
35850
35882
  {
35851
- "data-part-id": PART_CLEAR_BUTTON$1,
35852
- className: classnames(
35853
- styles$p.clearButton,
35854
- styles$p.button
35855
- ),
35883
+ className: classnames(styles$p.clearButton, styles$p.button),
35856
35884
  disabled: !enabled2,
35857
35885
  onClick: clear,
35858
35886
  onFocus: stopPropagation,
35859
35887
  type: "button",
35860
35888
  children: clearIconElement
35861
35889
  }
35862
- )
35890
+ ) })
35863
35891
  ] }),
35864
35892
  endAdornment
35865
35893
  ]
@@ -35887,10 +35915,9 @@ function DayInput({
35887
35915
  }
35888
35916
  return 31;
35889
35917
  }, [month2, year2]);
35890
- return /* @__PURE__ */ jsx(
35918
+ return /* @__PURE__ */ jsx(Part, { partId: PART_DAY, children: /* @__PURE__ */ jsx(
35891
35919
  PartialInput,
35892
35920
  {
35893
- "data-part-id": PART_DAY,
35894
35921
  id: otherProps.id,
35895
35922
  value,
35896
35923
  emptyCharacter,
@@ -35919,7 +35946,7 @@ function DayInput({
35919
35946
  ariaLabel: otherProps.ariaLabel,
35920
35947
  isInvalid
35921
35948
  }
35922
- );
35949
+ ) });
35923
35950
  }
35924
35951
  function MonthInput({
35925
35952
  minValue,
@@ -35930,10 +35957,9 @@ function MonthInput({
35930
35957
  emptyCharacter = "-",
35931
35958
  ...otherProps
35932
35959
  }) {
35933
- return /* @__PURE__ */ jsx(
35960
+ return /* @__PURE__ */ jsx(Part, { partId: PART_MONTH, children: /* @__PURE__ */ jsx(
35934
35961
  PartialInput,
35935
35962
  {
35936
- "data-part-id": PART_MONTH,
35937
35963
  id: otherProps.id,
35938
35964
  max: 12,
35939
35965
  min: 1,
@@ -35962,7 +35988,7 @@ function MonthInput({
35962
35988
  nextInputRef: otherProps.nextInputRef,
35963
35989
  ariaLabel: otherProps.ariaLabel
35964
35990
  }
35965
- );
35991
+ ) });
35966
35992
  }
35967
35993
  function YearInput({
35968
35994
  minValue,
@@ -35979,10 +36005,9 @@ function YearInput({
35979
36005
  const min = 1900;
35980
36006
  const max = currentYear + 100;
35981
36007
  const { className: originalClassName, ...restProps } = otherProps;
35982
- return /* @__PURE__ */ jsx(
36008
+ return /* @__PURE__ */ jsx(Part, { partId: PART_YEAR, children: /* @__PURE__ */ jsx(
35983
36009
  PartialInput,
35984
36010
  {
35985
- "data-part-id": PART_YEAR,
35986
36011
  id: otherProps.id,
35987
36012
  max,
35988
36013
  min,
@@ -36003,7 +36028,7 @@ function YearInput({
36003
36028
  },
36004
36029
  ...restProps
36005
36030
  }
36006
- );
36031
+ ) });
36007
36032
  }
36008
36033
  function parseDateString(dateString, dateFormat) {
36009
36034
  if (typeof dateString !== "string" || dateString === null || dateString === void 0) {
@@ -36471,11 +36496,6 @@ function safeMin(...args) {
36471
36496
  function safeMax(...args) {
36472
36497
  return Math.max(...args.filter(isValidNumber));
36473
36498
  }
36474
- const PART_HOUR = "hour";
36475
- const PART_MINUTE = "minute";
36476
- const PART_SECOND = "second";
36477
- const PART_AMPM = "ampm";
36478
- const PART_CLEAR_BUTTON = "clearButton";
36479
36499
  const defaultProps$j = {
36480
36500
  enabled: true,
36481
36501
  validationStatus: "none",
@@ -37006,10 +37026,9 @@ const TimeInputNative = forwardRef(function TimeInputNative2({
37006
37026
  }
37007
37027
  )
37008
37028
  ] }),
37009
- clearable && /* @__PURE__ */ jsx(
37029
+ clearable && /* @__PURE__ */ jsx(Part, { partId: "clearButton", children: /* @__PURE__ */ jsx(
37010
37030
  "button",
37011
37031
  {
37012
- "data-part-id": PART_CLEAR_BUTTON,
37013
37032
  className: classnames(styles$m.clearButton, styles$m.button),
37014
37033
  disabled: !enabled2,
37015
37034
  onClick: clear,
@@ -37017,7 +37036,7 @@ const TimeInputNative = forwardRef(function TimeInputNative2({
37017
37036
  type: "button",
37018
37037
  children: clearIconElement
37019
37038
  }
37020
- )
37039
+ ) })
37021
37040
  ] }),
37022
37041
  endAdornment
37023
37042
  ]
@@ -37060,11 +37079,10 @@ function AmPmButton({
37060
37079
  },
37061
37080
  [onKeyDown, disabled2, onAmPmSet, value, amDisabled, pmDisabled]
37062
37081
  );
37063
- return /* @__PURE__ */ jsx(
37082
+ return /* @__PURE__ */ jsx(Part, { partId: "ampm", children: /* @__PURE__ */ jsx(
37064
37083
  "button",
37065
37084
  {
37066
37085
  type: "button",
37067
- "data-part-id": PART_AMPM,
37068
37086
  "aria-label": ariaLabel || "Toggle AM/PM (Press A for AM, P for PM)",
37069
37087
  autoFocus,
37070
37088
  className: classnames(styles$m.amPmButton, styles$m.button, className),
@@ -37074,7 +37092,7 @@ function AmPmButton({
37074
37092
  ref: buttonRef,
37075
37093
  children: /* @__PURE__ */ jsx("span", { className: styles$m.amPmValue, children: value ? value === "am" ? amLabel : pmLabel : "--" })
37076
37094
  }
37077
- );
37095
+ ) });
37078
37096
  }
37079
37097
  function HourInput({
37080
37098
  id,
@@ -37122,11 +37140,10 @@ function HourInput({
37122
37140
  }
37123
37141
  })();
37124
37142
  const displayValue = value || "";
37125
- return /* @__PURE__ */ jsx(
37143
+ return /* @__PURE__ */ jsx(Part, { partId: "hour", children: /* @__PURE__ */ jsx(
37126
37144
  PartialInput,
37127
37145
  {
37128
37146
  id,
37129
- "data-part-id": PART_HOUR,
37130
37147
  value: displayValue,
37131
37148
  emptyCharacter,
37132
37149
  placeholderLength: 2,
@@ -37154,7 +37171,7 @@ function HourInput({
37154
37171
  ariaLabel: otherProps.ariaLabel,
37155
37172
  isInvalid
37156
37173
  }
37157
- );
37174
+ ) });
37158
37175
  }
37159
37176
  function MinuteInput({
37160
37177
  hour: hour2,
@@ -37171,10 +37188,9 @@ function MinuteInput({
37171
37188
  }
37172
37189
  const maxMinute = safeMin(59, maxTime && isSameHour(maxTime) && getMinutes(maxTime));
37173
37190
  const minMinute = safeMax(0, minTime && isSameHour(minTime) && getMinutes(minTime));
37174
- return /* @__PURE__ */ jsx(
37191
+ return /* @__PURE__ */ jsx(Part, { partId: "minute", children: /* @__PURE__ */ jsx(
37175
37192
  PartialInput,
37176
37193
  {
37177
- "data-part-id": PART_MINUTE,
37178
37194
  max: maxMinute,
37179
37195
  min: minMinute,
37180
37196
  name: "minute",
@@ -37202,7 +37218,7 @@ function MinuteInput({
37202
37218
  ariaLabel: otherProps.ariaLabel,
37203
37219
  isInvalid
37204
37220
  }
37205
- );
37221
+ ) });
37206
37222
  }
37207
37223
  function SecondInput({
37208
37224
  hour: hour2,
@@ -37220,10 +37236,9 @@ function SecondInput({
37220
37236
  }
37221
37237
  const maxSecond = safeMin(59, maxTime && isSameMinute(maxTime) && getSeconds(maxTime));
37222
37238
  const minSecond = safeMax(0, minTime && isSameMinute(minTime) && getSeconds(minTime));
37223
- return /* @__PURE__ */ jsx(
37239
+ return /* @__PURE__ */ jsx(Part, { partId: "second", children: /* @__PURE__ */ jsx(
37224
37240
  PartialInput,
37225
37241
  {
37226
- "data-part-id": PART_SECOND,
37227
37242
  max: maxSecond,
37228
37243
  min: minSecond,
37229
37244
  name: "second",
@@ -37251,7 +37266,7 @@ function SecondInput({
37251
37266
  ariaLabel: otherProps.ariaLabel,
37252
37267
  isInvalid
37253
37268
  }
37254
- );
37269
+ ) });
37255
37270
  }
37256
37271
  function parseTimeString(timeValue, targetIs12Hour = false) {
37257
37272
  if (timeValue == null || timeValue === void 0) {
@@ -39078,6 +39093,17 @@ const COMP$p = "Slider";
39078
39093
  const SliderMd = createMetadata({
39079
39094
  status: "stable",
39080
39095
  description: "`Slider` provides an interactive control for selecting numeric values within a defined range, supporting both single value selection and range selection with multiple thumbs. It offers precise control through customizable steps and visual feedback with formatted value display.Hover over the component to see the tooltip with the current value. On mobile, tap the thumb to see the tooltip.",
39096
+ parts: {
39097
+ label: {
39098
+ description: "The label displayed for the slider."
39099
+ },
39100
+ track: {
39101
+ description: "The track element of the slider."
39102
+ },
39103
+ thumb: {
39104
+ description: "The thumb elements of the slider."
39105
+ }
39106
+ },
39081
39107
  props: {
39082
39108
  initialValue: dInitialValue(),
39083
39109
  minValue: {
@@ -42873,6 +42899,14 @@ const COMP$b = "CodeBlock";
42873
42899
  const CodeBlockMd = createMetadata({
42874
42900
  status: "stable",
42875
42901
  description: `The \`${COMP$b}\` component displays code with optional syntax highlighting and meta information.`,
42902
+ parts: {
42903
+ header: {
42904
+ description: "The header section of the CodeBlock, typically displaying the filename."
42905
+ },
42906
+ content: {
42907
+ description: "The main content area of the CodeBlock where the code is displayed."
42908
+ }
42909
+ },
42876
42910
  props: {},
42877
42911
  themeVars: parseScssVar(styles$A.themeVars),
42878
42912
  defaultThemeVars: {
@@ -44812,6 +44846,17 @@ const COMP$2 = "Pagination";
44812
44846
  const PaginationMd = createMetadata({
44813
44847
  status: "experimental",
44814
44848
  description: "`Pagination` enables navigation through large datasets by dividing content into pages. It provides controls for page navigation and can display current page information.",
44849
+ parts: {
44850
+ buttonRow: {
44851
+ description: "The container for pagination buttons."
44852
+ },
44853
+ pageInfo: {
44854
+ description: "The container for page information display."
44855
+ },
44856
+ pageSizeSelector: {
44857
+ description: "The container for the page size selector dropdown."
44858
+ }
44859
+ },
44815
44860
  props: {
44816
44861
  enabled: dEnabled(),
44817
44862
  itemCount: d(
@@ -46639,7 +46684,7 @@ function IconProvider({ children }) {
46639
46684
  /* @__PURE__ */ jsx("svg", { style: { display: "none" }, ref: spriteRootRef })
46640
46685
  ] });
46641
46686
  }
46642
- const version = "0.11.15";
46687
+ const version = "0.11.17";
46643
46688
  const miscellaneousUtils = {
46644
46689
  capitalize,
46645
46690
  pluralize: pluralize$1,
@@ -46917,21 +46962,21 @@ function createContainerReducer(debugView) {
46917
46962
  case ContainerActionKind.EVENT_HANDLER_STARTED: {
46918
46963
  const { eventName } = action2.payload;
46919
46964
  const inProgressFlagName = `${eventName}InProgress`;
46920
- state[uid] = state[uid] ? { ...state[uid], [inProgressFlagName]: true } : { [inProgressFlagName]: true };
46965
+ state[uid] = { ...state[uid], [inProgressFlagName]: true };
46921
46966
  storeNextValue(state[uid]);
46922
46967
  break;
46923
46968
  }
46924
46969
  case ContainerActionKind.EVENT_HANDLER_COMPLETED: {
46925
46970
  const { eventName } = action2.payload;
46926
46971
  const inProgressFlagName = `${eventName}InProgress`;
46927
- state[uid] = state[uid] ? { ...state[uid], [inProgressFlagName]: false } : { [inProgressFlagName]: false };
46972
+ state[uid] = { ...state[uid], [inProgressFlagName]: false };
46928
46973
  storeNextValue(state[uid]);
46929
46974
  break;
46930
46975
  }
46931
46976
  case ContainerActionKind.EVENT_HANDLER_ERROR: {
46932
46977
  const { eventName } = action2.payload;
46933
46978
  const inProgressFlagName = `${eventName}InProgress`;
46934
- state[uid] = state[uid] ? { ...state[uid], [inProgressFlagName]: false } : { [inProgressFlagName]: false };
46979
+ state[uid] = { ...state[uid], [inProgressFlagName]: false };
46935
46980
  storeNextValue(state[uid]);
46936
46981
  break;
46937
46982
  }
@@ -49019,9 +49064,7 @@ const StateContainer = memo(
49019
49064
  const routingParams = useRoutingParams();
49020
49065
  const memoedVars = useRef(/* @__PURE__ */ new Map());
49021
49066
  const stateFromOutside = useShallowCompareMemoize(
49022
- useMemo(() => {
49023
- return extractScopedState(parentState, node.uses);
49024
- }, [node.uses, parentState])
49067
+ useMemo(() => extractScopedState(parentState, node.uses), [node.uses, parentState])
49025
49068
  );
49026
49069
  const debugView = useDebugView();
49027
49070
  const containerReducer = createContainerReducer(debugView);
@@ -49030,15 +49073,10 @@ const StateContainer = memo(
49030
49073
  const componentStateWithApis = useShallowCompareMemoize(
49031
49074
  useMemo(() => {
49032
49075
  const ret = { ...componentState };
49033
- const registeredApiKeys = new Set(
49034
- Object.getOwnPropertySymbols(componentApis).map((s) => s.description).filter((d2) => d2 !== void 0)
49035
- );
49036
49076
  for (const stateKey of Object.getOwnPropertySymbols(componentState)) {
49037
49077
  const value = componentState[stateKey];
49038
49078
  if (stateKey.description) {
49039
- if (registeredApiKeys.has(stateKey.description)) {
49040
- ret[stateKey.description] = value;
49041
- }
49079
+ ret[stateKey.description] = value;
49042
49080
  }
49043
49081
  }
49044
49082
  if (Reflect.ownKeys(componentApis).length === 0) {
@@ -49102,11 +49140,8 @@ const StateContainer = memo(
49102
49140
  const mergedWithVars = useMergedState(resolvedLocalVars, componentStateWithApis);
49103
49141
  const combinedState = useCombinedState(
49104
49142
  stateFromOutside,
49105
- // Parent state (lower priority) - allows local vars to shadow
49106
49143
  node.contextVars,
49107
- // Context vars like $item
49108
49144
  mergedWithVars,
49109
- // Local vars and component state (higher priority) - enables shadowing
49110
49145
  routingParams
49111
49146
  );
49112
49147
  const registerComponentApi = useCallback((uid, api) => {