prime-ui-kit 0.20.0 → 0.21.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (151) hide show
  1. package/README.md +1 -1
  2. package/dist/chunks/{chunk-4KONMO7Z.js → chunk-6L7VWEY6.js} +1 -1
  3. package/dist/chunks/{chunk-3PY52JP3.js → chunk-S27VR4ON.js} +5828 -5596
  4. package/dist/chunks/{chunk-W6EGTNG6.js → chunk-S4H2ZKWJ.js} +1099 -661
  5. package/dist/color-picker.js +2 -2
  6. package/dist/components/badge/Badge.d.ts +19 -2
  7. package/dist/components/card/Card.d.ts +10 -3
  8. package/dist/components/composer/Composer.d.ts +49 -1
  9. package/dist/components/crossfade/Crossfade.d.ts +6 -4
  10. package/dist/components/data-table/DataTable.d.ts +10 -2
  11. package/dist/components/data-table/Row.d.ts +12 -1
  12. package/dist/components/data-table/SelectionMenu.d.ts +20 -0
  13. package/dist/components/data-table/useRowSelection.d.ts +2 -0
  14. package/dist/components/empty-page/EmptyPage.d.ts +5 -2
  15. package/dist/components/hint/Hint.d.ts +1 -1
  16. package/dist/components/index.d.ts +1 -1
  17. package/dist/components/input/Input.d.ts +15 -3
  18. package/dist/components/message/Message.d.ts +6 -3
  19. package/dist/components/segmented-control/SegmentedControl.d.ts +5 -1
  20. package/dist/components/smart-filter/SmartFilter.d.ts +4 -0
  21. package/dist/components/spinner/Spinner.d.ts +3 -2
  22. package/dist/components/tabs/Tabs.d.ts +10 -1
  23. package/dist/hooks/useModalLayer.d.ts +15 -8
  24. package/dist/index.css +1 -1
  25. package/dist/index.js +2 -2
  26. package/dist/internal/RegionSwap.d.ts +18 -10
  27. package/dist/internal/RollingNumber.d.ts +7 -5
  28. package/dist/internal/ToolRow.d.ts +6 -0
  29. package/dist/internal/mediaSlot.d.ts +29 -0
  30. package/dist/internal/overlay/DialogParts.d.ts +30 -6
  31. package/dist/internal/overlay/focus.d.ts +18 -3
  32. package/dist/internal/partPresence.d.ts +19 -2
  33. package/dist/layout/sidebar/Sidebar.d.ts +3 -2
  34. package/dist/skill/anti-slop.md +35 -37
  35. package/dist/skill/api-contract.md +50 -2
  36. package/dist/skill/cheatsheet.md +15 -10
  37. package/dist/skill/checklist.md +19 -6
  38. package/dist/skill/choosing.md +79 -6
  39. package/dist/skill/components.md +1 -1
  40. package/dist/skill/composition.md +211 -51
  41. package/dist/skill/foundations.md +17 -6
  42. package/dist/skill/layouts.md +64 -14
  43. package/dist/skill/motion.md +9 -3
  44. package/dist/skill/reference/components/avatar/COMPONENT.md +1 -0
  45. package/dist/skill/reference/components/badge/COMPONENT.md +29 -5
  46. package/dist/skill/reference/components/badge/examples/examples.module.css +14 -0
  47. package/dist/skill/reference/components/badge/examples/overflow-count.tsx +32 -0
  48. package/dist/skill/reference/components/banner/COMPONENT.md +1 -1
  49. package/dist/skill/reference/components/card/COMPONENT.md +8 -4
  50. package/dist/skill/reference/components/card/examples/person-header.tsx +38 -0
  51. package/dist/skill/reference/components/composer/COMPONENT.md +35 -5
  52. package/dist/skill/reference/components/composer/examples/bot-keyboard.tsx +43 -0
  53. package/dist/skill/reference/components/confirm-dialog/COMPONENT.md +1 -1
  54. package/dist/skill/reference/components/crossfade/COMPONENT.md +18 -10
  55. package/dist/skill/reference/components/data-table/COMPONENT.md +17 -11
  56. package/dist/skill/reference/components/data-table/examples/screen.tsx +6 -9
  57. package/dist/skill/reference/components/data-table/examples/selection.tsx +60 -18
  58. package/dist/skill/reference/components/dnd/COMPONENT.md +3 -3
  59. package/dist/skill/reference/components/drawer/COMPONENT.md +41 -19
  60. package/dist/skill/reference/components/drawer/examples/footer-actions.tsx +54 -0
  61. package/dist/skill/reference/components/drawer/examples/header-actions.tsx +46 -25
  62. package/dist/skill/reference/components/drawer/examples/link-loading.tsx +57 -0
  63. package/dist/skill/reference/components/drawer/examples/screen.tsx +3 -5
  64. package/dist/skill/reference/components/empty-page/COMPONENT.md +2 -2
  65. package/dist/skill/reference/components/field-list/COMPONENT.md +7 -7
  66. package/dist/skill/reference/components/field-list/examples/row-menu.tsx +1 -1
  67. package/dist/skill/reference/components/hint/COMPONENT.md +1 -1
  68. package/dist/skill/reference/components/input/COMPONENT.md +16 -3
  69. package/dist/skill/reference/components/input/examples/password-policy.tsx +65 -0
  70. package/dist/skill/reference/components/list/COMPONENT.md +1 -1
  71. package/dist/skill/reference/components/login-form/COMPONENT.md +13 -11
  72. package/dist/skill/reference/components/login-form/examples/overview.tsx +5 -5
  73. package/dist/skill/reference/components/login-form/examples/states.tsx +7 -6
  74. package/dist/skill/reference/components/message/COMPONENT.md +5 -5
  75. package/dist/skill/reference/components/message/examples/bot-actions.tsx +47 -28
  76. package/dist/skill/reference/components/modal/COMPONENT.md +31 -12
  77. package/dist/skill/reference/components/modal/examples/structure.tsx +2 -4
  78. package/dist/skill/reference/components/segmented-control/COMPONENT.md +11 -6
  79. package/dist/skill/reference/components/segmented-control/examples/router.tsx +22 -0
  80. package/dist/skill/reference/components/select/COMPONENT.md +4 -1
  81. package/dist/skill/reference/components/sheet/COMPONENT.md +31 -12
  82. package/dist/skill/reference/components/sheet/examples/header-actions.tsx +5 -3
  83. package/dist/skill/reference/components/skeleton/COMPONENT.md +3 -2
  84. package/dist/skill/reference/components/smart-filter/COMPONENT.md +2 -1
  85. package/dist/skill/reference/components/smart-filter/examples/ranges.tsx +8 -2
  86. package/dist/skill/reference/components/spinner/COMPONENT.md +1 -1
  87. package/dist/skill/reference/components/tabs/COMPONENT.md +7 -4
  88. package/dist/skill/reference/components/tabs/examples/in-drawer.tsx +18 -2
  89. package/dist/skill/reference/components/thumbnail/COMPONENT.md +1 -0
  90. package/dist/skill/reference/components/tooltip/COMPONENT.md +3 -3
  91. package/dist/skill/reference/foundation.md +15 -9
  92. package/dist/skill/reference/layout/page/COMPONENT.md +1 -0
  93. package/dist/skill/reference/layout/sidebar/COMPONENT.md +4 -2
  94. package/dist/skill/reference/layout/sidebar/examples/account-profile.tsx +66 -0
  95. package/dist/skill/responsive.md +28 -6
  96. package/dist/skill/ux.md +97 -2
  97. package/dist/tokens/semantic.d.ts +2 -1
  98. package/dist/tokens/themes/dark.d.ts +1 -0
  99. package/package.json +1 -1
  100. package/src/components/avatar/COMPONENT.md +1 -0
  101. package/src/components/badge/COMPONENT.md +29 -5
  102. package/src/components/badge/examples/examples.module.css +14 -0
  103. package/src/components/badge/examples/overflow-count.tsx +32 -0
  104. package/src/components/banner/COMPONENT.md +1 -1
  105. package/src/components/card/COMPONENT.md +8 -4
  106. package/src/components/card/examples/person-header.tsx +38 -0
  107. package/src/components/composer/COMPONENT.md +35 -5
  108. package/src/components/composer/examples/bot-keyboard.tsx +43 -0
  109. package/src/components/confirm-dialog/COMPONENT.md +1 -1
  110. package/src/components/crossfade/COMPONENT.md +18 -10
  111. package/src/components/data-table/COMPONENT.md +17 -11
  112. package/src/components/data-table/examples/screen.tsx +6 -9
  113. package/src/components/data-table/examples/selection.tsx +60 -18
  114. package/src/components/dnd/COMPONENT.md +3 -3
  115. package/src/components/drawer/COMPONENT.md +41 -19
  116. package/src/components/drawer/examples/footer-actions.tsx +54 -0
  117. package/src/components/drawer/examples/header-actions.tsx +46 -25
  118. package/src/components/drawer/examples/link-loading.tsx +57 -0
  119. package/src/components/drawer/examples/screen.tsx +3 -5
  120. package/src/components/empty-page/COMPONENT.md +2 -2
  121. package/src/components/field-list/COMPONENT.md +7 -7
  122. package/src/components/field-list/examples/row-menu.tsx +1 -1
  123. package/src/components/hint/COMPONENT.md +1 -1
  124. package/src/components/input/COMPONENT.md +16 -3
  125. package/src/components/input/examples/password-policy.tsx +65 -0
  126. package/src/components/list/COMPONENT.md +1 -1
  127. package/src/components/login-form/COMPONENT.md +13 -11
  128. package/src/components/login-form/examples/overview.tsx +5 -5
  129. package/src/components/login-form/examples/states.tsx +7 -6
  130. package/src/components/message/COMPONENT.md +5 -5
  131. package/src/components/message/examples/bot-actions.tsx +47 -28
  132. package/src/components/modal/COMPONENT.md +31 -12
  133. package/src/components/modal/examples/structure.tsx +2 -4
  134. package/src/components/segmented-control/COMPONENT.md +11 -6
  135. package/src/components/segmented-control/examples/router.tsx +22 -0
  136. package/src/components/select/COMPONENT.md +4 -1
  137. package/src/components/sheet/COMPONENT.md +31 -12
  138. package/src/components/sheet/examples/header-actions.tsx +5 -3
  139. package/src/components/skeleton/COMPONENT.md +3 -2
  140. package/src/components/smart-filter/COMPONENT.md +2 -1
  141. package/src/components/smart-filter/examples/ranges.tsx +8 -2
  142. package/src/components/spinner/COMPONENT.md +1 -1
  143. package/src/components/tabs/COMPONENT.md +7 -4
  144. package/src/components/tabs/examples/in-drawer.tsx +18 -2
  145. package/src/components/thumbnail/COMPONENT.md +1 -0
  146. package/src/components/tooltip/COMPONENT.md +3 -3
  147. package/src/layout/page/COMPONENT.md +1 -0
  148. package/src/layout/sidebar/COMPONENT.md +4 -2
  149. package/src/layout/sidebar/examples/account-profile.tsx +66 -0
  150. package/src/styles/theme-dark.css +1 -0
  151. package/src/styles/theme-light.css +1 -0
@@ -144,6 +144,7 @@ import {
144
144
  useCreateStore,
145
145
  useEdgeOverflow,
146
146
  useElementSize,
147
+ useEnterOnAppear,
147
148
  useFieldCell,
148
149
  useFieldCommit,
149
150
  useFieldFrame,
@@ -159,6 +160,7 @@ import {
159
160
  useLoadMore,
160
161
  useMediaQuery,
161
162
  useMediaSession,
163
+ useMediaSlotHost,
162
164
  useMergedRefs,
163
165
  useNestedSurfaceDepth,
164
166
  useOpenState,
@@ -181,7 +183,7 @@ import {
181
183
  useTextParts,
182
184
  visuallyHiddenClass,
183
185
  zonedParts
184
- } from "./chunk-3PY52JP3.js";
186
+ } from "./chunk-S27VR4ON.js";
185
187
  import {
186
188
  COMPACT_QUERY,
187
189
  ControlSizeProvider,
@@ -1263,7 +1265,8 @@ function BannerRoot({
1263
1265
  ...rest
1264
1266
  }) {
1265
1267
  const rootRef = React6.useRef(null);
1266
- const mergedRef = useMergedRefs(rootRef, ref);
1268
+ const appear = useEnterOnAppear();
1269
+ const mergedRef = useMergedRefs(rootRef, appear.ref, ref);
1267
1270
  const tier = useHostTier(sizeProp);
1268
1271
  const size = tier.size;
1269
1272
  React6.useLayoutEffect(() => {
@@ -1286,7 +1289,7 @@ function BannerRoot({
1286
1289
  {
1287
1290
  ...rest,
1288
1291
  ref: mergedRef,
1289
- className: cx(fieldTierClass, Banner_default.root, enterMotion_default.enter, className),
1292
+ className: cx(fieldTierClass, Banner_default.root, appear.entering && enterMotion_default.enter, className),
1290
1293
  "data-depth": depth,
1291
1294
  ...toDataAttributes({ variant, tone, size, placement }),
1292
1295
  children: /* @__PURE__ */ jsx8(SurfaceDepthProvider, { value: depth, children: /* @__PURE__ */ jsx8(BannerContext.Provider, { value: context, children: tier.provide(
@@ -1402,7 +1405,8 @@ function useModalLayer({
1402
1405
  open,
1403
1406
  closeOnEscape,
1404
1407
  closeOnOutsideClick,
1405
- onDismiss
1408
+ onDismiss,
1409
+ focusStart = "tabStop"
1406
1410
  }) {
1407
1411
  const ref = React8.useRef(null);
1408
1412
  const openerRef = React8.useRef({ element: null, target: null, byPointer: false });
@@ -1411,11 +1415,13 @@ function useModalLayer({
1411
1415
  wasOpenRef.current = open;
1412
1416
  if (open) openerRef.current = captureOpener();
1413
1417
  }
1418
+ const focusStartRef = React8.useRef(focusStart);
1419
+ focusStartRef.current = focusStart;
1414
1420
  useInertSiblings(open, ref);
1415
1421
  React8.useEffect(() => {
1416
1422
  const node = ref.current;
1417
1423
  if (!open || !node) return;
1418
- focusInto(node);
1424
+ focusInto(node, void 0, openerRef.current.byPointer, focusStartRef.current);
1419
1425
  return () => {
1420
1426
  const { element: opener, byPointer } = openerRef.current;
1421
1427
  if (opener?.closest("[inert]")) queueMicrotask(() => focusBack(opener, byPointer));
@@ -1452,6 +1458,7 @@ var DialogParts_default = {
1452
1458
  close: "DialogParts_close",
1453
1459
  title: "DialogParts_title",
1454
1460
  description: "DialogParts_description",
1461
+ titleSkeleton: "DialogParts_titleSkeleton",
1455
1462
  descriptionSkeleton: "DialogParts_descriptionSkeleton",
1456
1463
  body: "DialogParts_body",
1457
1464
  section: "DialogParts_section",
@@ -1461,6 +1468,7 @@ var DialogParts_default = {
1461
1468
  sectionDescription: "DialogParts_sectionDescription",
1462
1469
  footer: "DialogParts_footer",
1463
1470
  meta: "DialogParts_meta",
1471
+ footerStart: "DialogParts_footerStart",
1464
1472
  footerActions: "DialogParts_footerActions"
1465
1473
  };
1466
1474
 
@@ -1561,6 +1569,7 @@ function DialogPanelBody({
1561
1569
  overlayClassName,
1562
1570
  enterConfirm = false,
1563
1571
  controlSize,
1572
+ focusStart,
1564
1573
  className,
1565
1574
  children,
1566
1575
  "aria-label": ariaLabel,
@@ -1579,7 +1588,8 @@ function DialogPanelBody({
1579
1588
  open: root.open,
1580
1589
  closeOnEscape: root.closeOnEscape,
1581
1590
  closeOnOutsideClick: root.closeOnOutsideClick,
1582
- onDismiss: root.requestClose
1591
+ onDismiss: root.requestClose,
1592
+ focusStart
1583
1593
  });
1584
1594
  const panelRef = useMergedRefs(layerRef, ref);
1585
1595
  const compact = useMediaQuery(COMPACT_QUERY, swipePolicy === "compact");
@@ -1606,7 +1616,7 @@ function DialogPanelBody({
1606
1616
  onEnterConfirm: root.onEnterConfirm,
1607
1617
  confirmRef
1608
1618
  });
1609
- const content = /* @__PURE__ */ jsx9(DialogShellProvider, { value: shell.value, children: /* @__PURE__ */ jsx9(LayerProvider, { value: layer, children: /* @__PURE__ */ jsx9(SurfaceDepthProvider, { value: "floating", children }) }) });
1619
+ const content = /* @__PURE__ */ jsx9(DialogShellProvider, { value: shell.value, children: /* @__PURE__ */ jsx9(LayerProvider, { value: layer, children: /* @__PURE__ */ jsx9(DialogFooterContext.Provider, { value: false, children: /* @__PURE__ */ jsx9(SurfaceDepthProvider, { value: "floating", children }) }) }) });
1610
1620
  return /* @__PURE__ */ jsxs6("div", { className: DialogParts_default.root, children: [
1611
1621
  /* @__PURE__ */ jsx9(
1612
1622
  "div",
@@ -1704,15 +1714,8 @@ function DialogShellProvider({
1704
1714
  }) {
1705
1715
  return /* @__PURE__ */ jsx9(DialogShellContext.Provider, { value, children });
1706
1716
  }
1707
- function mediaOf(children) {
1708
- if (!React9.isValidElement(children)) return null;
1709
- if (children.type === Avatar.Root) {
1710
- return React9.cloneElement(children, { size: "l" });
1711
- }
1712
- return children.type === Thumbnail.Root ? children : null;
1713
- }
1714
1717
  function DialogIcon({ tone = "neutral", children, className, ...rest }) {
1715
- const media = mediaOf(children);
1718
+ const { media, provide } = useMediaSlotHost();
1716
1719
  return /* @__PURE__ */ jsx9(
1717
1720
  "span",
1718
1721
  {
@@ -1721,18 +1724,29 @@ function DialogIcon({ tone = "neutral", children, className, ...rest }) {
1721
1724
  "data-tone": media ? void 0 : tone,
1722
1725
  "data-media": media ? true : void 0,
1723
1726
  "aria-hidden": "true",
1724
- children: media ?? children
1727
+ children: provide(children)
1725
1728
  }
1726
1729
  );
1727
1730
  }
1728
1731
  DialogIcon.displayName = "Dialog.Icon";
1729
- function DialogTitle({ className, ...rest }) {
1732
+ function DialogTitle({ loading = false, className, children, ...rest }) {
1730
1733
  const { titleId, registerTitle } = useDialogShell("Title");
1734
+ const swap = useSwapIn(loading ? "loading" : "data");
1731
1735
  React9.useLayoutEffect(() => {
1732
1736
  registerTitle(true);
1733
1737
  return () => registerTitle(false);
1734
1738
  }, [registerTitle]);
1735
- return /* @__PURE__ */ jsx9("h2", { id: titleId, className: cx(textRole_default.titleM, DialogParts_default.title, className), ...rest });
1739
+ return /* @__PURE__ */ createElement(
1740
+ "h2",
1741
+ {
1742
+ ...rest,
1743
+ key: swap.key,
1744
+ id: titleId,
1745
+ "aria-busy": loading || void 0,
1746
+ className: cx(textRole_default.titleM, DialogParts_default.title, swap.className, className)
1747
+ },
1748
+ loading ? /* @__PURE__ */ jsx9(Skeleton, { size: "l", className: DialogParts_default.titleSkeleton }) : children
1749
+ );
1736
1750
  }
1737
1751
  DialogTitle.displayName = "Dialog.Title";
1738
1752
  function DialogDescription({
@@ -1756,7 +1770,7 @@ function DialogDescription({
1756
1770
  "aria-busy": loading || void 0,
1757
1771
  className: cx(textRole_default.bodyS, DialogParts_default.description, swap.className, className)
1758
1772
  },
1759
- loading ? /* @__PURE__ */ jsx9(Skeleton, { size: "xs", className: DialogParts_default.descriptionSkeleton }) : children
1773
+ loading ? /* @__PURE__ */ jsx9(Skeleton, { size: "xs", className: DialogParts_default.descriptionSkeleton }) : /* @__PURE__ */ jsx9(ControlSizeProvider, { value: "m", children })
1760
1774
  );
1761
1775
  }
1762
1776
  DialogDescription.displayName = "Dialog.Description";
@@ -1808,8 +1822,13 @@ function DialogHeader({
1808
1822
  );
1809
1823
  }
1810
1824
  DialogHeader.displayName = "Dialog.Header";
1825
+ var DialogFooterContext = React9.createContext(false);
1811
1826
  function DialogActions({ className, children, ...rest }) {
1812
1827
  useDialogShell("Actions");
1828
+ const inFooter = React9.useContext(DialogFooterContext);
1829
+ if (inFooter) {
1830
+ return /* @__PURE__ */ jsx9("div", { className: cx(DialogParts_default.footerStart, className), ...rest, children });
1831
+ }
1813
1832
  return /* @__PURE__ */ jsx9("div", { className: cx(fieldTierClass, DialogParts_default.actions, className), "data-size": "s", ...rest, children: /* @__PURE__ */ jsx9(ControlSizeProvider, { value: "s", children }) });
1814
1833
  }
1815
1834
  DialogActions.displayName = "Dialog.Actions";
@@ -1862,17 +1881,19 @@ function DialogSection({
1862
1881
  DialogSection.displayName = "Dialog.Section";
1863
1882
  function DialogFooter({ layout, className, children, ...rest }) {
1864
1883
  const { footerLayout } = useDialogShell("Footer");
1865
- const { parts: meta, rest: actions } = splitParts(children, DialogMeta);
1884
+ const { parts: start, rest: other } = splitParts(children, DialogActions);
1885
+ const { parts: meta, rest: actions } = splitParts(other, DialogMeta);
1866
1886
  return /* @__PURE__ */ jsx9(
1867
1887
  "footer",
1868
1888
  {
1869
1889
  className: cx(hairline_default.top, DialogParts_default.footer, className),
1870
1890
  "data-layout": layout ?? footerLayout,
1871
1891
  ...rest,
1872
- children: meta.length > 0 ? /* @__PURE__ */ jsxs6(Fragment4, { children: [
1892
+ children: /* @__PURE__ */ jsx9(DialogFooterContext.Provider, { value: true, children: start.length + meta.length > 0 ? /* @__PURE__ */ jsxs6(Fragment4, { children: [
1893
+ start,
1873
1894
  meta,
1874
1895
  /* @__PURE__ */ jsx9("div", { className: DialogParts_default.footerActions, children: actions })
1875
- ] }) : children
1896
+ ] }) : children })
1876
1897
  }
1877
1898
  );
1878
1899
  }
@@ -2021,10 +2042,15 @@ var ConfirmDialog = {
2021
2042
  Trigger: ConfirmDialogTrigger
2022
2043
  };
2023
2044
 
2045
+ // src/components/crossfade/Crossfade.module.css
2046
+ var Crossfade_default = {
2047
+ root: "Crossfade_root"
2048
+ };
2049
+
2024
2050
  // src/components/crossfade/Crossfade.tsx
2025
2051
  import { jsx as jsx12 } from "react/jsx-runtime";
2026
- function Crossfade(props) {
2027
- return /* @__PURE__ */ jsx12(RegionSwap, { ...props });
2052
+ function Crossfade({ className, ...props }) {
2053
+ return /* @__PURE__ */ jsx12(RegionSwap, { ...props, className: cx(Crossfade_default.root, className) });
2028
2054
  }
2029
2055
 
2030
2056
  // src/internal/barPlan.ts
@@ -3107,8 +3133,9 @@ var SegmentedControl_default = {
3107
3133
  import { Fragment as Fragment6, jsx as jsx15, jsxs as jsxs10 } from "react/jsx-runtime";
3108
3134
  var [SegmentedControlProvider, useSegmentedControlContext] = createComponentContext("SegmentedControl");
3109
3135
  var CollapseContext = React13.createContext("full");
3136
+ var ITEM = `.${SegmentedControl_default.item}`;
3110
3137
  var ENABLED_ITEM2 = '[role="radio"]:not([data-disabled="true"])';
3111
- var CHECKED_ITEM = '[role="radio"][aria-checked="true"]';
3138
+ var CHECKED_ITEM = `${ITEM}[data-state="checked"]`;
3112
3139
  function syncThumbColor(thumb, active) {
3113
3140
  const color = active?.dataset.color;
3114
3141
  if (color === thumb.dataset.color) return;
@@ -3118,11 +3145,11 @@ function syncThumbColor(thumb, active) {
3118
3145
  function fitCollapse(viewport2, list) {
3119
3146
  const fits = (level2) => {
3120
3147
  list.dataset.collapse = level2;
3121
- return list.scrollWidth <= viewport2.clientWidth + 0.5;
3148
+ return viewport2.scrollWidth <= viewport2.clientWidth + 1;
3122
3149
  };
3123
3150
  if (fits("full") || fits("compact")) return list.dataset.collapse;
3124
- const items = list.querySelectorAll('[role="radio"]');
3125
- const icons = list.querySelectorAll(`[role="radio"] > .${SegmentedControl_default.icon}`);
3151
+ const items = list.querySelectorAll(ITEM);
3152
+ const icons = list.querySelectorAll(`${ITEM} > .${SegmentedControl_default.icon}`);
3126
3153
  const level = items.length > 0 && icons.length === items.length ? "icon" : "compact";
3127
3154
  list.dataset.collapse = level;
3128
3155
  return level;
@@ -3172,6 +3199,7 @@ function SegmentedControlRoot({
3172
3199
  const size = tier.size;
3173
3200
  const disabled = useInheritedDisabled(disabledProp);
3174
3201
  const ids = useFieldFrame(id, { label, hint, error, invalid }, ariaDescribedBy);
3202
+ const links = hasLinkItems(children);
3175
3203
  const [selectedValue, setSelectedValue] = useControllableState({
3176
3204
  value,
3177
3205
  defaultValue,
@@ -3233,6 +3261,7 @@ function SegmentedControlRoot({
3233
3261
  );
3234
3262
  function handleKeyDown(event) {
3235
3263
  onKeyDown?.(event);
3264
+ if (links) return;
3236
3265
  const items = Array.from(event.currentTarget.querySelectorAll(ENABLED_ITEM2));
3237
3266
  const index = items.indexOf(document.activeElement);
3238
3267
  const next = rovingIndex(event.key, index, items.length, "both");
@@ -3273,13 +3302,13 @@ function SegmentedControlRoot({
3273
3302
  "div",
3274
3303
  {
3275
3304
  id: ids.controlId,
3276
- role: "radiogroup",
3305
+ role: links ? "navigation" : "radiogroup",
3277
3306
  "aria-label": ariaLabel,
3278
3307
  "aria-labelledby": ariaLabelledBy ?? ids.labelledBy,
3279
3308
  "aria-describedby": ids.describedBy,
3280
- "aria-invalid": ids.invalid || void 0,
3281
- "aria-required": required || void 0,
3282
- "aria-disabled": disabled || void 0,
3309
+ "aria-invalid": !links && ids.invalid || void 0,
3310
+ "aria-required": !links && required || void 0,
3311
+ "aria-disabled": !links && disabled || void 0,
3283
3312
  className: cx(fieldTierClass, SegmentedControl_default.root),
3284
3313
  onKeyDown: handleKeyDown,
3285
3314
  ...toDataAttributes({
@@ -3330,6 +3359,11 @@ function SegmentedControlRoot({
3330
3359
  ) });
3331
3360
  }
3332
3361
  SegmentedControlRoot.displayName = "SegmentedControl.Root";
3362
+ function hasLinkItems(children) {
3363
+ return React13.Children.toArray(children).some(
3364
+ (child) => React13.isValidElement(child) && child.type === SegmentedControlItem && child.props.asChild === true
3365
+ );
3366
+ }
3333
3367
  function isIconOnly(children) {
3334
3368
  const nodes = React13.Children.toArray(children);
3335
3369
  return nodes.length > 0 && nodes.every((node) => React13.isValidElement(node) && node.type === SegmentedControlIcon);
@@ -3352,6 +3386,7 @@ function SegmentedControlItem({
3352
3386
  value,
3353
3387
  disabled = false,
3354
3388
  color,
3389
+ asChild = false,
3355
3390
  children,
3356
3391
  className,
3357
3392
  onClick,
@@ -3361,43 +3396,63 @@ function SegmentedControlItem({
3361
3396
  const ctx = useSegmentedControlContext();
3362
3397
  const collapse = React13.useContext(CollapseContext);
3363
3398
  const [tooltipOpen, setTooltipOpen] = React13.useState(false);
3399
+ const child = asChild ? slotChild(children, "SegmentedControl.Item") : null;
3400
+ const content = child ? child.props.children : children;
3364
3401
  const isChecked = ctx.value === value;
3365
3402
  const isDisabled = ctx.rootDisabled || disabled;
3366
3403
  const isTabStop = !isDisabled && ctx.focusValue === value;
3367
- const twoLine = hasChildOfType(children, SegmentedControlDescription);
3404
+ const twoLine = hasChildOfType(content, SegmentedControlDescription);
3368
3405
  const parts = useTextParts();
3369
- const label = labelOf(children);
3370
- const segment = (
3406
+ const label = labelOf(content);
3407
+ const shared = {
3408
+ "aria-labelledby": parts.labelledBy,
3409
+ "aria-describedby": parts.describedBy,
3410
+ ...toDataAttributes({
3411
+ state: isChecked ? "checked" : "unchecked",
3412
+ disabled: isDisabled || void 0,
3413
+ "icon-only": isIconOnly(content) || void 0,
3414
+ "two-line": twoLine || void 0,
3415
+ value,
3416
+ color
3417
+ }),
3418
+ className: cx(palette_default.hue, SegmentedControl_default.item, touchTargetBlockClass, className),
3419
+ onClick: (event) => {
3420
+ onClick?.(event);
3421
+ if (!isDisabled && !event.defaultPrevented) ctx.onSelect(value);
3422
+ }
3423
+ };
3424
+ const inner2 = /* @__PURE__ */ jsxs10(Fragment6, { children: [
3425
+ color ? /* @__PURE__ */ jsx15(Badge.Dot, { className: SegmentedControl_default.dot }) : null,
3426
+ parts.provide(labelPlainText(content, SegmentedControlLabel))
3427
+ ] });
3428
+ const segment = child ? (
3429
+ // A link segment: in the Tab order like any link, the current one `aria-current="page"`.
3430
+ /* @__PURE__ */ jsx15(
3431
+ InteractiveElement,
3432
+ {
3433
+ ...rest,
3434
+ ...shared,
3435
+ ref,
3436
+ element: "slot",
3437
+ disabled: isDisabled,
3438
+ "aria-current": isChecked ? "page" : void 0,
3439
+ children: React13.cloneElement(child, void 0, inner2)
3440
+ }
3441
+ )
3442
+ ) : (
3371
3443
  // biome-ignore lint/a11y/useSemanticElements: radiogroup of buttons with roving tabindex (WAI-ARIA APG)
3372
- /* @__PURE__ */ jsxs10(
3444
+ /* @__PURE__ */ jsx15(
3373
3445
  "button",
3374
3446
  {
3375
3447
  ...rest,
3448
+ ...shared,
3376
3449
  ref,
3377
3450
  role: "radio",
3378
3451
  type: "button",
3379
3452
  "aria-checked": isChecked,
3380
- "aria-labelledby": parts.labelledBy,
3381
- "aria-describedby": parts.describedBy,
3382
- ...toDataAttributes({
3383
- state: isChecked ? "checked" : "unchecked",
3384
- disabled: isDisabled || void 0,
3385
- "icon-only": isIconOnly(children) || void 0,
3386
- "two-line": twoLine || void 0,
3387
- value,
3388
- color
3389
- }),
3390
3453
  tabIndex: isTabStop ? 0 : -1,
3391
3454
  disabled: isDisabled,
3392
- className: cx(palette_default.hue, SegmentedControl_default.item, touchTargetBlockClass, className),
3393
- onClick: (event) => {
3394
- onClick?.(event);
3395
- if (!isDisabled && !event.defaultPrevented) ctx.onSelect(value);
3396
- },
3397
- children: [
3398
- color ? /* @__PURE__ */ jsx15(Badge.Dot, { className: SegmentedControl_default.dot }) : null,
3399
- parts.provide(labelPlainText(children, SegmentedControlLabel))
3400
- ]
3455
+ children: inner2
3401
3456
  }
3402
3457
  )
3403
3458
  );
@@ -3643,6 +3698,7 @@ var NUMBER = new Intl.NumberFormat("ru-RU");
3643
3698
  function rangeText(field, range, labels) {
3644
3699
  if (field.kind === "date-range") {
3645
3700
  return formatDatepickerValue({
3701
+ ...field.calendar,
3646
3702
  mode: "range",
3647
3703
  value: {
3648
3704
  from: range.from instanceof Date ? range.from : null,
@@ -3867,6 +3923,7 @@ function Panel({ searchable }) {
3867
3923
  ) : /* @__PURE__ */ jsx17(
3868
3924
  Datepicker.Root,
3869
3925
  {
3926
+ ...field.calendar,
3870
3927
  mode: "range",
3871
3928
  size,
3872
3929
  fullWidth: true,
@@ -4156,6 +4213,9 @@ import { jsx as jsx18 } from "react/jsx-runtime";
4156
4213
  function ToolGroup({ className, ...rest }) {
4157
4214
  return /* @__PURE__ */ jsx18("div", { ...rest, className: cx(ToolRow_default.group, className) });
4158
4215
  }
4216
+ function ToolCell({ className, ...rest }) {
4217
+ return /* @__PURE__ */ jsx18("div", { ...rest, className: cx(ToolRow_default.cell, className), "data-kind": "fixed" });
4218
+ }
4159
4219
  function kindOf(node) {
4160
4220
  if (isPart(node, SmartFilter.Toolbar) || isPart(node, Input.Root) || isPart(node, Typography) || isPart(node, ToolGroup)) {
4161
4221
  return "grow";
@@ -4171,7 +4231,9 @@ function filled(node) {
4171
4231
  }
4172
4232
  var keyOf = (node, index) => React15.isValidElement(node) && node.key != null ? String(node.key) : `#${index}`;
4173
4233
  function ToolRow({ fill = true, className, children, ...rest }) {
4174
- return /* @__PURE__ */ jsx18("div", { ...rest, className: cx(ToolRow_default.row, className), "data-fill": fill ? "true" : void 0, children: flattenChildren(children).map((item, index) => /* @__PURE__ */ jsx18("div", { className: ToolRow_default.cell, "data-kind": kindOf(item), children: filled(item) }, keyOf(item, index))) });
4234
+ return /* @__PURE__ */ jsx18("div", { ...rest, className: cx(ToolRow_default.row, className), "data-fill": fill ? "true" : void 0, children: flattenChildren(children).map(
4235
+ (item, index) => isPart(item, ToolCell) ? React15.cloneElement(item, { key: keyOf(item, index) }) : /* @__PURE__ */ jsx18("div", { className: ToolRow_default.cell, "data-kind": kindOf(item), children: filled(item) }, keyOf(item, index))
4236
+ ) });
4175
4237
  }
4176
4238
  function ToolChips({ className, ...rest }) {
4177
4239
  return /* @__PURE__ */ jsx18("div", { ...rest, className: cx(ToolRow_default.chips, className) });
@@ -6092,6 +6154,8 @@ function SidebarBrand({
6092
6154
  SidebarBrand.displayName = "Sidebar.Brand";
6093
6155
  function SidebarAccount({ description, className, children, type, ...rest }) {
6094
6156
  const { size } = useSidebar();
6157
+ const popup = rest["aria-haspopup"];
6158
+ const opensMenu = popup === "menu" || popup === true || popup === "true";
6095
6159
  const nodes = React19.Children.toArray(children);
6096
6160
  const avatar = nodes.find((node) => isElementOf(node, Avatar.Root));
6097
6161
  const name = nodes.filter((node) => node !== avatar);
@@ -6107,7 +6171,7 @@ function SidebarAccount({ description, className, children, type, ...rest }) {
6107
6171
  /* @__PURE__ */ jsx22("span", { className: Sidebar_default.accountName, children: name }),
6108
6172
  description == null ? null : /* @__PURE__ */ jsx22("span", { className: Sidebar_default.accountDescription, children: description })
6109
6173
  ] }),
6110
- /* @__PURE__ */ jsx22(Icon, { name: "nav.chevronsUpDown", className: Sidebar_default.accountChevron })
6174
+ opensMenu ? /* @__PURE__ */ jsx22(Icon, { name: "nav.chevronsUpDown", className: Sidebar_default.accountChevron }) : null
6111
6175
  ]
6112
6176
  }
6113
6177
  ) });
@@ -6508,8 +6572,8 @@ var Card_default = {
6508
6572
  description: "Card_description",
6509
6573
  label: "Card_label",
6510
6574
  value: "Card_value",
6511
- body: "Card_body",
6512
6575
  icon: "Card_icon",
6576
+ body: "Card_body",
6513
6577
  delta: "Card_delta",
6514
6578
  meta: "Card_meta",
6515
6579
  valueSkeleton: "Card_valueSkeleton",
@@ -6599,13 +6663,17 @@ function CardFooter({ className, ...rest }) {
6599
6663
  return /* @__PURE__ */ jsx25("div", { className: cx(Card_default.footer, ruled && hairline_default.top, className), ...rest });
6600
6664
  }
6601
6665
  CardFooter.displayName = "Card.Footer";
6602
- function CardIcon({ className, ...rest }) {
6666
+ function CardIcon({ className, children, ...rest }) {
6667
+ const { media, provide } = useMediaSlotHost();
6603
6668
  return /* @__PURE__ */ jsx25(
6604
6669
  "div",
6605
6670
  {
6671
+ "aria-hidden": media ? true : void 0,
6606
6672
  ...rest,
6607
- className: cx(iconBox_default.tile, iconSlotClass, Card_default.icon, className),
6608
- "data-tone": "accent"
6673
+ className: cx(!media && iconBox_default.tile, !media && iconSlotClass, Card_default.icon, className),
6674
+ "data-tone": media ? void 0 : "accent",
6675
+ "data-media": media ? "true" : void 0,
6676
+ children: provide(children)
6609
6677
  }
6610
6678
  );
6611
6679
  }
@@ -8183,6 +8251,7 @@ var Message_default = {
8183
8251
  status: "Message_status",
8184
8252
  tick: "Message_tick",
8185
8253
  actions: "Message_actions",
8254
+ linkMark: "Message_linkMark",
8186
8255
  reactionsSlot: "Message_reactionsSlot",
8187
8256
  reactions: "Message_reactions",
8188
8257
  chipSlot: "Message_chipSlot",
@@ -13199,7 +13268,7 @@ MessageTyping.displayName = "Message.Typing";
13199
13268
  defineRowKind(MessageTyping, { tail: true });
13200
13269
 
13201
13270
  // src/components/message/Message.tsx
13202
- import { jsx as jsx43, jsxs as jsxs32 } from "react/jsx-runtime";
13271
+ import { Fragment as Fragment22, jsx as jsx43, jsxs as jsxs32 } from "react/jsx-runtime";
13203
13272
  var STATUS_ICONS = [
13204
13273
  ["sending", "status.pending"],
13205
13274
  ["sent", "status.sent"],
@@ -13365,8 +13434,37 @@ function estimateOf(body, specs, shell, reactions, author, actionRows) {
13365
13434
  return Math.round(size + (reactions ? 36 : 0) + actionRows * ACTIONS_ESTIMATE + 8);
13366
13435
  }
13367
13436
  var NO_REACTIONS = [];
13368
- function MessageActions({ className, ...rest }) {
13369
- return /* @__PURE__ */ jsx43("div", { className: cx(Message_default.actions, className), ...rest });
13437
+ function isLinkKey(props) {
13438
+ const child = props.children;
13439
+ return props.asChild === true && React43.isValidElement(child) && child.type === "a" && child.props.href !== void 0;
13440
+ }
13441
+ function MessageActions({ className, children, ...rest }) {
13442
+ const { pending, track: track2 } = usePendingKeys();
13443
+ return /* @__PURE__ */ jsx43("div", { className: cx(Message_default.actions, className), ...rest, children: React43.Children.map(children, (child, index) => {
13444
+ if (!React43.isValidElement(child) || child.type !== Button.Root) {
13445
+ return child;
13446
+ }
13447
+ const { props } = child;
13448
+ const link = isLinkKey(props) ? React43.cloneElement(props.children, {
13449
+ children: /* @__PURE__ */ jsxs32(Fragment22, { children: [
13450
+ props.children.props.children,
13451
+ /* @__PURE__ */ jsx43(Icon, { name: "action.externalLink", size: "xs", className: Message_default.linkMark })
13452
+ ] })
13453
+ }) : void 0;
13454
+ return React43.cloneElement(child, {
13455
+ variant: props.variant ?? "soft",
13456
+ tone: props.tone ?? "neutral",
13457
+ fullWidth: true,
13458
+ loading: props.loading || pending.has(index),
13459
+ onClick: (event) => {
13460
+ track2(
13461
+ index,
13462
+ props.onClick?.(event)
13463
+ );
13464
+ },
13465
+ ...link ? { children: link } : null
13466
+ });
13467
+ }) });
13370
13468
  }
13371
13469
  MessageActions.displayName = "Message.Actions";
13372
13470
  var ACTIONS_ESTIMATE = 40;
@@ -13434,6 +13532,7 @@ function MessageRoot({
13434
13532
  const neutralDepth = useNestedSurfaceDepth();
13435
13533
  const depth = direction === "outgoing" ? "tinted" : neutralDepth;
13436
13534
  const { selecting, selected } = useMessageSelection(value);
13535
+ const selectMark = useEnterOnAppear(selecting);
13437
13536
  const toggleSelected = (event) => {
13438
13537
  const article2 = rootRef.current;
13439
13538
  if (article2) list.range.onClick(list.indexOf(article2), event);
@@ -13660,9 +13759,19 @@ function MessageRoot({
13660
13759
  tail ? /* @__PURE__ */ jsx43("span", { className: Message_default.bubbleTail, "data-depth": depth, "aria-hidden": "true" }) : null
13661
13760
  ] }),
13662
13761
  shell === "bubble" ? null : reactionsPart,
13663
- preview ? actions.map(
13664
- (row2) => React43.cloneElement(row2, { inert: true })
13665
- ) : actions,
13762
+ actions.map(
13763
+ (row2, index) => (
13764
+ // The last row ends the message: its outer corners take the bubble's radius.
13765
+ React43.cloneElement(
13766
+ row2,
13767
+ {
13768
+ key: row2.key ?? index,
13769
+ inert: preview || void 0,
13770
+ "data-end": index === actions.length - 1 ? "" : void 0
13771
+ }
13772
+ )
13773
+ )
13774
+ ),
13666
13775
  /* @__PURE__ */ jsx43(BubbleHug, { bubble: bubbleRef }),
13667
13776
  /* @__PURE__ */ jsx43(MorphSnapshot, { morph })
13668
13777
  ]
@@ -13762,7 +13871,15 @@ function MessageRoot({
13762
13871
  quickReact();
13763
13872
  },
13764
13873
  children: [
13765
- selecting ? /* @__PURE__ */ jsx43("span", { className: cx(Message_default.select, enterMotion_default.enter), "aria-hidden": "true", children: /* @__PURE__ */ jsx43(Checkbox.Indicator, { shape: "circle", checked: selected }) }) : null,
13874
+ selecting ? /* @__PURE__ */ jsx43(
13875
+ "span",
13876
+ {
13877
+ ref: selectMark.ref,
13878
+ className: cx(Message_default.select, selectMark.entering && enterMotion_default.enter),
13879
+ "aria-hidden": "true",
13880
+ children: /* @__PURE__ */ jsx43(Checkbox.Indicator, { shape: "circle", checked: selected })
13881
+ }
13882
+ ) : null,
13766
13883
  gutter ? /* @__PURE__ */ jsx43("div", { className: cx(Message_default.gutter, statusLoop_default.blink), children: showAvatar ? avatar : null }) : null,
13767
13884
  status === "failed" && onRetry && !preview ? /* @__PURE__ */ jsx43("span", { className: cx(Message_default.retry, statusLoop_default.blink), "data-morph-item": "", children: /* @__PURE__ */ jsx43(
13768
13885
  Button.Root,
@@ -13934,6 +14051,7 @@ function ChatPinned({
13934
14051
  if (next !== void 0) onValueChange?.(next);
13935
14052
  }
13936
14053
  });
14054
+ const excerpt = useEnterOnAppear();
13937
14055
  if (items.length === 0) return null;
13938
14056
  const found = items.findIndex((item) => item.value === value);
13939
14057
  const index = found === -1 ? items.length - 1 : found;
@@ -13968,7 +14086,15 @@ function ChatPinned({
13968
14086
  /* @__PURE__ */ jsx44("span", { className: ChatPinned_default.icon, "aria-hidden": "true", children: /* @__PURE__ */ jsx44(Icon, { name: "action.pin" }) }),
13969
14087
  /* @__PURE__ */ jsxs33("span", { className: ChatPinned_default.text, children: [
13970
14088
  /* @__PURE__ */ jsx44("span", { className: ChatPinned_default.title, children: title }),
13971
- /* @__PURE__ */ jsx44("span", { className: cx(ChatPinned_default.excerpt, enterMotion_default.enter), children: current.text }, current.value)
14089
+ /* @__PURE__ */ jsx44(
14090
+ "span",
14091
+ {
14092
+ ref: excerpt.ref,
14093
+ className: cx(ChatPinned_default.excerpt, excerpt.entering && enterMotion_default.enter),
14094
+ children: current.text
14095
+ },
14096
+ current.value
14097
+ )
13972
14098
  ] })
13973
14099
  ]
13974
14100
  }
@@ -15328,7 +15454,8 @@ function ChatSelectionBar({ className, children, ref, ...rest }) {
15328
15454
  const { container, labels } = React46.useContext(ChromeContext);
15329
15455
  const selected = useListSelection();
15330
15456
  const barRef = React46.useRef(null);
15331
- const mergedRef = useMergedRefs(barRef, ref);
15457
+ const appear = useEnterOnAppear();
15458
+ const mergedRef = useMergedRefs(barRef, appear.ref, ref);
15332
15459
  useBottomBar(barRef, container, selected !== null);
15333
15460
  if (selected === null) return null;
15334
15461
  const count = formatLabel(labels.selectedCount, { count: selected.length });
@@ -15338,7 +15465,7 @@ function ChatSelectionBar({ className, children, ref, ...rest }) {
15338
15465
  ref: mergedRef,
15339
15466
  role: "toolbar",
15340
15467
  "aria-label": count,
15341
- className: cx(Chat_default.selectionBar, enterMotion_default.enter, className),
15468
+ className: cx(Chat_default.selectionBar, appear.entering && enterMotion_default.enter, className),
15342
15469
  "data-depth": "floating",
15343
15470
  ...rest,
15344
15471
  children: /* @__PURE__ */ jsxs34(SurfaceDepthProvider, { value: "floating", children: [
@@ -15364,7 +15491,7 @@ ChatSelectionBar.displayName = "Chat.SelectionBar";
15364
15491
  defineRowKind(ChatSelectionBar, { tail: true });
15365
15492
 
15366
15493
  // src/components/chat/Chat.tsx
15367
- import { Fragment as Fragment24, jsx as jsx47, jsxs as jsxs35 } from "react/jsx-runtime";
15494
+ import { Fragment as Fragment25, jsx as jsx47, jsxs as jsxs35 } from "react/jsx-runtime";
15368
15495
  var CHAT_LABELS = {
15369
15496
  ...MESSAGE_LIST_LABELS,
15370
15497
  typing: "\u043F\u0435\u0447\u0430\u0442\u0430\u0435\u0442\u2026",
@@ -15714,7 +15841,7 @@ function ChatMessages({
15714
15841
  );
15715
15842
  const name = ariaLabel ?? (ariaLabelledBy || chat.hasTitle ? void 0 : chat.labels.messages);
15716
15843
  const selection = chat.selected === void 0 ? {} : { selected: chat.selected, onSelectedChange: chat.setSelected };
15717
- return /* @__PURE__ */ jsxs35(Fragment24, { children: [
15844
+ return /* @__PURE__ */ jsxs35(Fragment25, { children: [
15718
15845
  /* @__PURE__ */ jsx47(
15719
15846
  Crossfade,
15720
15847
  {
@@ -16407,22 +16534,51 @@ function translate(point, grab) {
16407
16534
  function isTransparent(color) {
16408
16535
  return color === "" || color === "transparent" || /rgba?\([^)]*,\s*0\s*\)$/.test(color);
16409
16536
  }
16537
+ var CONTAINER_SHELL = {
16538
+ display: "block",
16539
+ "box-sizing": "content-box",
16540
+ "min-width": "0",
16541
+ "max-width": "none",
16542
+ "min-height": "0",
16543
+ "max-height": "none",
16544
+ margin: "0",
16545
+ padding: "0",
16546
+ border: "none",
16547
+ background: "none",
16548
+ "box-shadow": "none",
16549
+ outline: "none",
16550
+ overflow: "visible",
16551
+ position: "static",
16552
+ transform: "none",
16553
+ translate: "none",
16554
+ scale: "none",
16555
+ rotate: "none",
16556
+ opacity: "1",
16557
+ filter: "none",
16558
+ "clip-path": "none"
16559
+ };
16410
16560
  function inHostCopy(parent, inner2) {
16411
16561
  let outer = inner2;
16412
- const wrap = (node2) => {
16413
- const shell = node2.cloneNode(false);
16414
- shell.style.display = "contents";
16415
- shell.append(outer);
16416
- outer = shell;
16417
- };
16418
16562
  let node = parent;
16419
- while (node && node !== document.body) {
16420
- wrap(node);
16421
- if (node.hasAttribute("data-depth")) {
16422
- const theme = node.parentElement?.closest("[data-theme]");
16423
- if (theme && theme !== document.documentElement && theme !== document.body) wrap(theme);
16424
- break;
16563
+ while (node && node !== document.body && node !== document.documentElement) {
16564
+ const shell = node.cloneNode(false);
16565
+ const source = getComputedStyle(node);
16566
+ const container = source.getPropertyValue("container-type").trim();
16567
+ if (container === "inline-size" || container === "size") {
16568
+ for (const [property, value] of Object.entries(CONTAINER_SHELL))
16569
+ shell.style.setProperty(property, value ?? null);
16570
+ const px3 = (value) => Number.parseFloat(value) || 0;
16571
+ const width = node.clientWidth - px3(source.paddingLeft) - px3(source.paddingRight);
16572
+ shell.style.setProperty("width", `${Math.max(0, width)}px`);
16573
+ if (container === "size") {
16574
+ const height = node.clientHeight - px3(source.paddingTop) - px3(source.paddingBottom);
16575
+ shell.style.setProperty("height", `${Math.max(0, height)}px`);
16576
+ } else shell.style.setProperty("height", "auto");
16577
+ } else {
16578
+ shell.style.display = "contents";
16425
16579
  }
16580
+ shell.append(outer);
16581
+ outer = shell;
16426
16582
  node = node.parentElement;
16427
16583
  }
16428
16584
  return outer;
@@ -16474,11 +16630,6 @@ function cloneFor(preview) {
16474
16630
  clone.style.width = `${preview.origin.width}px`;
16475
16631
  clone.style.height = `${preview.origin.height}px`;
16476
16632
  clone.style.margin = "0";
16477
- const source = getComputedStyle(preview.element);
16478
- if (isTransparent(source.backgroundColor)) {
16479
- const layer = source.getPropertyValue("--prime-color-layer-current").trim();
16480
- if (layer) clone.style.backgroundColor = layer;
16481
- }
16482
16633
  const row = preview.element instanceof HTMLTableRowElement ? preview.element : null;
16483
16634
  const cell = preview.element instanceof HTMLTableCellElement ? preview.element : null;
16484
16635
  const lifted = row ? inTableCopy(row, clone, preview.origin) : cell ? inHeadCopy(cell, clone, preview.origin) : clone;
@@ -16503,6 +16654,12 @@ function cloneFor(preview) {
16503
16654
  lifted.classList.add(Dnd_default.lift);
16504
16655
  return outer;
16505
16656
  }
16657
+ function fillBareCopy(host, source) {
16658
+ const copy = host.querySelector("[data-dnd-copy]");
16659
+ if (!copy || !isTransparent(getComputedStyle(copy).backgroundColor)) return;
16660
+ const layer = getComputedStyle(source).getPropertyValue("--prime-color-layer-current").trim();
16661
+ if (layer) copy.style.backgroundColor = layer;
16662
+ }
16506
16663
  function liftedIn(host) {
16507
16664
  return host.querySelector(`.${Dnd_default.lift}`);
16508
16665
  }
@@ -16687,6 +16844,7 @@ function DragOverlay({ controller }) {
16687
16844
  mirrorRef.current = null;
16688
16845
  const copy = cloneFor(event.preview);
16689
16846
  host.replaceChildren(copy);
16847
+ fillBareCopy(host, event.preview.element);
16690
16848
  host.style.transform = translate(event.preview.point, event.preview.grab);
16691
16849
  const source = event.preview.element;
16692
16850
  if (typeof MutationObserver === "function" && source.querySelector("[data-dnd-mirror]")) {
@@ -16783,7 +16941,7 @@ function DragOverlay({ controller }) {
16783
16941
 
16784
16942
  // src/components/dnd/inPlaceRow.tsx
16785
16943
  import * as React52 from "react";
16786
- var ITEM = "[data-dnd-item]";
16944
+ var ITEM2 = "[data-dnd-item]";
16787
16945
  function drawnX(node) {
16788
16946
  const transform = getComputedStyle(node).transform;
16789
16947
  if (!transform || transform === "none") return 0;
@@ -16848,7 +17006,7 @@ function useInPlaceShift(row, order, draggingId, gapBefore) {
16848
17006
  }
16849
17007
  startOrder.current ??= orderKey;
16850
17008
  const cells = new Map(
16851
- ownNodes(row, ITEM).map((node) => [node.dataset.dndItem ?? "", node])
17009
+ ownNodes(row, ITEM2).map((node) => [node.dataset.dndItem ?? "", node])
16852
17010
  );
16853
17011
  const widthOf2 = (id) => cells.get(id)?.offsetWidth ?? 0;
16854
17012
  const startOf = (list) => {
@@ -17925,7 +18083,7 @@ var List_default = {
17925
18083
  };
17926
18084
 
17927
18085
  // src/components/list/List.tsx
17928
- import { Fragment as Fragment26, jsx as jsx50, jsxs as jsxs37 } from "react/jsx-runtime";
18086
+ import { Fragment as Fragment27, jsx as jsx50, jsxs as jsxs37 } from "react/jsx-runtime";
17929
18087
  var LIST_LABELS = {
17930
18088
  reorderItem: "\u041F\u0435\u0440\u0435\u043C\u0435\u0441\u0442\u0438\u0442\u044C {label}"
17931
18089
  };
@@ -18080,10 +18238,10 @@ function splitItemChildren3(children) {
18080
18238
  }
18081
18239
  }
18082
18240
  flushLoose();
18083
- return /* @__PURE__ */ jsxs37(Fragment26, { children: [
18241
+ return /* @__PURE__ */ jsxs37(Fragment27, { children: [
18084
18242
  leading,
18085
18243
  /* @__PURE__ */ jsx50("span", { className: List_default.body, children: spaced(body) }),
18086
- trail.length > 0 ? /* @__PURE__ */ jsxs37(Fragment26, { children: [
18244
+ trail.length > 0 ? /* @__PURE__ */ jsxs37(Fragment27, { children: [
18087
18245
  " ",
18088
18246
  /* @__PURE__ */ jsx50("span", { className: cx(List_default.trail, twoLines && List_default.trailStacked), children: spaced(trail) })
18089
18247
  ] }) : null
@@ -18232,7 +18390,7 @@ function formatChatTime(date, now, timeZone) {
18232
18390
  }
18233
18391
 
18234
18392
  // src/components/chat-list/ChatList.tsx
18235
- import { Fragment as Fragment28, jsx as jsx51, jsxs as jsxs38 } from "react/jsx-runtime";
18393
+ import { Fragment as Fragment29, jsx as jsx51, jsxs as jsxs38 } from "react/jsx-runtime";
18236
18394
  var CHAT_LIST_LABELS = {
18237
18395
  list: "\u0414\u0438\u0430\u043B\u043E\u0433\u0438",
18238
18396
  search: "\u041F\u043E\u0438\u0441\u043A \u043F\u043E \u0434\u0438\u0430\u043B\u043E\u0433\u0430\u043C",
@@ -18762,7 +18920,7 @@ function ChatListRoot({
18762
18920
  if (virtualized) {
18763
18921
  const laid = rowGaps(virtual);
18764
18922
  const spacer = (height) => height > 0 ? /* @__PURE__ */ jsx51("li", { className: ChatList_default.spacer, style: { height }, "aria-hidden": "true" }) : null;
18765
- rows2 = /* @__PURE__ */ jsxs38(Fragment28, { children: [
18923
+ rows2 = /* @__PURE__ */ jsxs38(Fragment29, { children: [
18766
18924
  laid.rows.map(({ index, gap }) => /* @__PURE__ */ jsxs38(React59.Fragment, { children: [
18767
18925
  spacer(gap),
18768
18926
  row(index, virtual.measure(index))
@@ -18794,7 +18952,7 @@ function ChatListRoot({
18794
18952
  /* @__PURE__ */ jsx51(EmptyPage.Title, { children: labels.empty })
18795
18953
  ] });
18796
18954
  } else {
18797
- body = /* @__PURE__ */ jsxs38(Fragment28, { children: [
18955
+ body = /* @__PURE__ */ jsxs38(Fragment29, { children: [
18798
18956
  /* @__PURE__ */ jsx51(List.Root, { ref: setListEl, size, "aria-label": labels.list, className: ChatList_default.list, children: rows2 }),
18799
18957
  hasMore ? placeholders(1) : null
18800
18958
  ] });
@@ -19370,7 +19528,7 @@ var CommandMenu_default = {
19370
19528
  };
19371
19529
 
19372
19530
  // src/components/command-menu/CommandMenu.tsx
19373
- import { Fragment as Fragment29, jsx as jsx55, jsxs as jsxs40 } from "react/jsx-runtime";
19531
+ import { Fragment as Fragment30, jsx as jsx55, jsxs as jsxs40 } from "react/jsx-runtime";
19374
19532
  var COMMAND_MENU_LABELS = {
19375
19533
  search: "\u041F\u043E\u0438\u0441\u043A",
19376
19534
  empty: "\u041D\u0438\u0447\u0435\u0433\u043E \u043D\u0435 \u043D\u0430\u0439\u0434\u0435\u043D\u043E",
@@ -19642,7 +19800,7 @@ function CommandMenuList({ className, children, ref, ...rest }) {
19642
19800
  if (inside && !regionRef.current?.contains(document.activeElement)) return;
19643
19801
  dialog.querySelector("[data-autofocus]")?.focus({ preventScroll: true });
19644
19802
  };
19645
- return /* @__PURE__ */ jsxs40(Fragment29, { children: [
19803
+ return /* @__PURE__ */ jsxs40(Fragment30, { children: [
19646
19804
  /* @__PURE__ */ jsx55(RegionSwap, { ref: regionRef, state: region, fill: true, onSwap: returnToSearch, children: region === "error" ? /* @__PURE__ */ jsxs40(EmptyPage.Root, { layout: "compact", size, role: "alert", children: [
19647
19805
  /* @__PURE__ */ jsx55(EmptyPage.Title, { as: "p", children: loadError }),
19648
19806
  onRetry ? /* @__PURE__ */ jsx55(EmptyPage.Actions, { children: /* @__PURE__ */ jsxs40(Button.Root, { variant: "soft", tone: "neutral", loading: retrying, onClick: onRetry, children: [
@@ -20049,7 +20207,7 @@ var FileUpload_default = {
20049
20207
  };
20050
20208
 
20051
20209
  // src/components/file-upload/FileUpload.tsx
20052
- import { Fragment as Fragment30, jsx as jsx57, jsxs as jsxs42 } from "react/jsx-runtime";
20210
+ import { Fragment as Fragment31, jsx as jsx57, jsxs as jsxs42 } from "react/jsx-runtime";
20053
20211
  var FILE_UPLOAD_LABELS = {
20054
20212
  title: "\u0412\u044B\u0431\u0435\u0440\u0438\u0442\u0435 \u0444\u0430\u0439\u043B \u0438\u043B\u0438 \u043F\u0435\u0440\u0435\u0442\u0430\u0449\u0438\u0442\u0435 \u0435\u0433\u043E \u0441\u044E\u0434\u0430",
20055
20213
  description: "JPEG, PNG, PDF, MP4 \u0434\u043E 50 \u041C\u0411",
@@ -20423,6 +20581,10 @@ function FileSetView({
20423
20581
  listRef
20424
20582
  }) {
20425
20583
  const { files, uploads, busy, canReorder, announcer } = set;
20584
+ const coverId = cover ? files[0]?.id : void 0;
20585
+ const [stillCover, setStillCover] = React64.useState(coverId);
20586
+ if (stillCover !== void 0 && coverId !== stillCover) setStillCover(void 0);
20587
+ const coverEnter = stillCover === void 0 ? enterMotion_default.enter : void 0;
20426
20588
  const ownRef = React64.useRef(null);
20427
20589
  const setListRef = useMergedRefs(ownRef, listRef);
20428
20590
  const kindId = `file-upload-${React64.useId()}`;
@@ -20458,7 +20620,7 @@ function FileSetView({
20458
20620
  };
20459
20621
  const region = announcer.own ? /* @__PURE__ */ jsx57(VisuallyHidden, { live: "polite", children: announcer.message }) : null;
20460
20622
  if (layout === "list") {
20461
- return /* @__PURE__ */ jsxs42(Fragment30, { children: [
20623
+ return /* @__PURE__ */ jsxs42(Fragment31, { children: [
20462
20624
  files.length > 0 || addTile ? /* @__PURE__ */ jsxs42(
20463
20625
  "ul",
20464
20626
  {
@@ -20522,7 +20684,7 @@ function FileSetView({
20522
20684
  openLabel: formatLabel(labels.open, { name: file.name }),
20523
20685
  badge: cover && index === 0 ? (
20524
20686
  // A new cover: the word comes in where the format stood.
20525
- kind === "file" ? /* @__PURE__ */ jsx57(Badge.Root, { className: enterMotion_default.enter, children: labels.cover }, "cover") : /* @__PURE__ */ jsx57("span", { className: enterMotion_default.enter, children: labels.cover }, "cover")
20687
+ kind === "file" ? /* @__PURE__ */ jsx57(Badge.Root, { className: coverEnter, children: labels.cover }, "cover") : /* @__PURE__ */ jsx57("span", { className: coverEnter, children: labels.cover }, "cover")
20526
20688
  ) : kind === "file" ? (
20527
20689
  // Decorative: the tile's name carries the extension.
20528
20690
  /* @__PURE__ */ jsx57(Badge.Root, { color: formatColor(format5), "aria-hidden": "true", children: (format5 || "\u2014").slice(0, 8).toUpperCase() })
@@ -20546,7 +20708,7 @@ function FileSetView({
20546
20708
  children: addTile
20547
20709
  }
20548
20710
  );
20549
- return /* @__PURE__ */ jsxs42(Fragment30, { children: [
20711
+ return /* @__PURE__ */ jsxs42(Fragment31, { children: [
20550
20712
  files.length > 0 || addTile ? /* @__PURE__ */ jsx57("div", { className: FileUpload_default.tiles, ...toDataAttributes({ layout, cover: cover || void 0 }), children: /* @__PURE__ */ jsx57(ControlSizeProvider, { value: "xs", children: strip ? /* @__PURE__ */ jsx57(AttachmentStripScroller, { children: list }) : list }) }) : null,
20551
20713
  region
20552
20714
  ] });
@@ -20568,6 +20730,8 @@ function FileRow({
20568
20730
  onRemove
20569
20731
  }) {
20570
20732
  const rowRef = React64.useRef(null);
20733
+ const appear = useEnterOnAppear();
20734
+ const setRowRef = useMergedRefs(rowRef, appear.ref);
20571
20735
  const { id } = file;
20572
20736
  React64.useLayoutEffect(() => {
20573
20737
  const node = rowRef.current;
@@ -20586,8 +20750,8 @@ function FileRow({
20586
20750
  return /* @__PURE__ */ jsx57(
20587
20751
  "li",
20588
20752
  {
20589
- ref: rowRef,
20590
- className: cx(FileUpload_default.queueRow, enterMotion_default.enter),
20753
+ ref: setRowRef,
20754
+ className: cx(FileUpload_default.queueRow, appear.entering && enterMotion_default.enter),
20591
20755
  "aria-busy": pending || void 0,
20592
20756
  "data-pending": pending || void 0,
20593
20757
  children: /* @__PURE__ */ jsxs42(FileUploadItem, { invalid: status === "failed", "data-status": status, children: [
@@ -20727,6 +20891,7 @@ function FileUploadField({
20727
20891
  const pickAccept = React64.useRef(accept);
20728
20892
  const requestedAccept = React64.useRef(null);
20729
20893
  const count = set.files.length;
20894
+ const emptyHint = useEnterOnAppear(count === 0 && max === void 0);
20730
20895
  const room = max === void 0 ? Number.POSITIVE_INFINITY : Math.max(0, max - count);
20731
20896
  const full = room === 0;
20732
20897
  const hasSet = trigger === "tile" || value !== void 0 || defaultValue !== void 0 || queue !== void 0;
@@ -20793,7 +20958,7 @@ function FileUploadField({
20793
20958
  if (none) {
20794
20959
  control = input;
20795
20960
  } else if (button) {
20796
- const content = children ?? /* @__PURE__ */ jsxs42(Fragment30, { children: [
20961
+ const content = children ?? /* @__PURE__ */ jsxs42(Fragment31, { children: [
20797
20962
  /* @__PURE__ */ jsx57(Button.Icon, { children: /* @__PURE__ */ jsx57(Icon, { name: "action.attach" }) }),
20798
20963
  labels.browse
20799
20964
  ] });
@@ -20851,7 +21016,18 @@ function FileUploadField({
20851
21016
  input,
20852
21017
  /* @__PURE__ */ jsx57("span", { className: cx(fieldTierClass, FileUpload_default.addIcon), "data-size": "xs", "aria-hidden": "true", children: /* @__PURE__ */ jsx57(Icon, { name: "action.add" }) }),
20853
21018
  /* @__PURE__ */ jsx57("span", { className: cx(textRole_default.caption, FileUpload_default.addText), children: /* @__PURE__ */ jsx57(MorphText, { children: full ? labels.full : empty ? labels.empty : labels.add }) }),
20854
- countText !== null ? /* @__PURE__ */ jsx57("span", { className: cx(textRole_default.caption, FileUpload_default.addHint), children: /* @__PURE__ */ jsx57(RollingNumber, { children: countText }) }) : empty ? /* @__PURE__ */ jsx57("span", { className: cx(textRole_default.caption, FileUpload_default.addHint, enterMotion_default.enter), children: labels.emptyHint }) : null
21019
+ countText !== null ? /* @__PURE__ */ jsx57("span", { className: cx(textRole_default.caption, FileUpload_default.addHint), children: /* @__PURE__ */ jsx57(RollingNumber, { children: countText }) }) : empty ? /* @__PURE__ */ jsx57(
21020
+ "span",
21021
+ {
21022
+ ref: emptyHint.ref,
21023
+ className: cx(
21024
+ textRole_default.caption,
21025
+ FileUpload_default.addHint,
21026
+ emptyHint.entering && enterMotion_default.enter
21027
+ ),
21028
+ children: labels.emptyHint
21029
+ }
21030
+ ) : null
20855
21031
  ] }) }) : null;
20856
21032
  const drops = !hiddenInput && !disabled;
20857
21033
  const dropHandlers = hiddenInput ? {} : {
@@ -21262,7 +21438,7 @@ var Textarea_default = {
21262
21438
  };
21263
21439
 
21264
21440
  // src/components/textarea/Textarea.tsx
21265
- import { Fragment as Fragment31, jsx as jsx59, jsxs as jsxs44 } from "react/jsx-runtime";
21441
+ import { Fragment as Fragment32, jsx as jsx59, jsxs as jsxs44 } from "react/jsx-runtime";
21266
21442
  var TEXTAREA_LABELS = {
21267
21443
  optional: "\u043D\u0435\u043E\u0431\u044F\u0437\u0430\u0442\u0435\u043B\u044C\u043D\u043E",
21268
21444
  counter: "{current} \u0438\u0437 {max} \u0441\u0438\u043C\u0432\u043E\u043B\u043E\u0432",
@@ -21427,7 +21603,7 @@ function TextareaRoot({
21427
21603
  "focus-ring": focusRing,
21428
21604
  capped: autoResize && maxRows !== void 0 || void 0
21429
21605
  }),
21430
- children: hasEdge ? /* @__PURE__ */ jsxs44(Fragment31, { children: [
21606
+ children: hasEdge ? /* @__PURE__ */ jsxs44(Fragment32, { children: [
21431
21607
  /* @__PURE__ */ jsx59("div", { className: Textarea_default.body, children: body }),
21432
21608
  /* @__PURE__ */ jsxs44("div", { className: Textarea_default.edge, children: [
21433
21609
  hasCommit ? /* @__PURE__ */ jsx59(FieldCommitStatus, { state: commit.state, labels }) : null,
@@ -21525,7 +21701,11 @@ var Composer_default = {
21525
21701
  contextIcon: "Composer_contextIcon",
21526
21702
  contextText: "Composer_contextText",
21527
21703
  title: "Composer_title",
21528
- description: "Composer_description"
21704
+ description: "Composer_description",
21705
+ keyboardToggle: "Composer_keyboardToggle",
21706
+ keyboardSlot: "Composer_keyboardSlot",
21707
+ keyboardKeys: "Composer_keyboardKeys",
21708
+ keyboardRow: "Composer_keyboardRow"
21529
21709
  };
21530
21710
 
21531
21711
  // src/components/composer/liveWave.ts
@@ -21812,7 +21992,7 @@ function useRecorder(onRecorded) {
21812
21992
  }
21813
21993
 
21814
21994
  // src/components/composer/Composer.tsx
21815
- import { jsx as jsx60, jsxs as jsxs45 } from "react/jsx-runtime";
21995
+ import { Fragment as Fragment33, jsx as jsx60, jsxs as jsxs45 } from "react/jsx-runtime";
21816
21996
  var COMPOSER_LABELS = {
21817
21997
  region: "\u041D\u043E\u0432\u043E\u0435 \u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u0435",
21818
21998
  placeholder: "\u0421\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u0435",
@@ -21843,7 +22023,8 @@ var COMPOSER_LABELS = {
21843
22023
  sendAsFiles: "\u041E\u0442\u043F\u0440\u0430\u0432\u0438\u0442\u044C \u043A\u0430\u043A \u0444\u0430\u0439\u043B\u044B, \u0431\u0435\u0437 \u0441\u0436\u0430\u0442\u0438\u044F",
21844
22024
  ...TEXT_FORMATTING_LABELS,
21845
22025
  cancelReply: "\u041E\u0442\u043C\u0435\u043D\u0438\u0442\u044C \u043E\u0442\u0432\u0435\u0442",
21846
- cancelEdit: "\u041E\u0442\u043C\u0435\u043D\u0438\u0442\u044C \u0440\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u0435"
22026
+ cancelEdit: "\u041E\u0442\u043C\u0435\u043D\u0438\u0442\u044C \u0440\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u0435",
22027
+ keyboard: "\u041A\u043B\u0430\u0432\u0438\u0430\u0442\u0443\u0440\u0430 \u0431\u043E\u0442\u0430"
21847
22028
  };
21848
22029
  var [ComposerProvider, useComposerContext] = createComponentContext("Composer");
21849
22030
  var HOLD_MS = 200;
@@ -22369,9 +22550,43 @@ function ComposerRoot({
22369
22550
  }
22370
22551
  };
22371
22552
  const [attachSlot, setAttachSlot] = React68.useState(null);
22553
+ const [keyboardSlot, setKeyboardSlot] = React68.useState(null);
22554
+ const [keyboardToggleSlot, setKeyboardToggleSlot] = React68.useState(null);
22555
+ const [keyboardPlaceholder, setKeyboardPlaceholder] = React68.useState(null);
22556
+ const sendRef = React68.useRef(onSend);
22557
+ sendRef.current = onSend;
22558
+ const sendText = React68.useCallback(
22559
+ (keyText) => sendRef.current?.({ text: keyText, albums: [], files: [] }),
22560
+ []
22561
+ );
22372
22562
  const contextValue = React68.useMemo(
22373
- () => ({ size, labels, disabled, addFiles, registerBar, focusFieldIfLive, attachSlot }),
22374
- [size, labels, disabled, addFiles, registerBar, focusFieldIfLive, attachSlot]
22563
+ () => ({
22564
+ size,
22565
+ labels,
22566
+ disabled,
22567
+ addFiles,
22568
+ registerBar,
22569
+ focusFieldIfLive,
22570
+ attachSlot,
22571
+ keyboardSlot,
22572
+ keyboardToggleSlot,
22573
+ setKeyboardPlaceholder,
22574
+ sendText,
22575
+ recording
22576
+ }),
22577
+ [
22578
+ size,
22579
+ labels,
22580
+ disabled,
22581
+ addFiles,
22582
+ registerBar,
22583
+ focusFieldIfLive,
22584
+ attachSlot,
22585
+ keyboardSlot,
22586
+ keyboardToggleSlot,
22587
+ sendText,
22588
+ recording
22589
+ ]
22375
22590
  );
22376
22591
  const actionKind = recording ? "send" : editing ? "save" : showRecord ? recordMode : "send";
22377
22592
  const pauseIcon = recorder.paused ? "action.play" : "action.pause";
@@ -22512,7 +22727,7 @@ function ComposerRoot({
22512
22727
  maxRows: MAX_ROWS,
22513
22728
  focusRing: false,
22514
22729
  value,
22515
- placeholder: labels.placeholder,
22730
+ placeholder: keyboardPlaceholder ?? labels.placeholder,
22516
22731
  "aria-label": labels.placeholder,
22517
22732
  "aria-describedby": [contextIds, recorder.error ? errorId : void 0].filter(Boolean).join(" ") || void 0,
22518
22733
  disabled,
@@ -22588,6 +22803,14 @@ function ComposerRoot({
22588
22803
  }
22589
22804
  ) : null,
22590
22805
  /* @__PURE__ */ jsxs45("div", { className: Composer_default.end, children: [
22806
+ /* @__PURE__ */ jsx60(
22807
+ "div",
22808
+ {
22809
+ ref: setKeyboardToggleSlot,
22810
+ className: Composer_default.keyboardToggle,
22811
+ inert: recording
22812
+ }
22813
+ ),
22591
22814
  lockPill.mounted ? /* @__PURE__ */ jsxs45(
22592
22815
  "span",
22593
22816
  {
@@ -22626,6 +22849,7 @@ function ComposerRoot({
22626
22849
  /* @__PURE__ */ jsx60(VisuallyHidden, { id: hintId, children: videoAvailable && voiceAvailable ? labels.recordSwitchHint : labels.recordHint })
22627
22850
  ] })
22628
22851
  ] }),
22852
+ /* @__PURE__ */ jsx60("div", { ref: setKeyboardSlot, className: Composer_default.keyboardSlot }),
22629
22853
  /* @__PURE__ */ jsx60(VisuallyHidden, { live: "polite", children: announcement })
22630
22854
  ]
22631
22855
  }
@@ -22684,9 +22908,12 @@ function ComposerContext({
22684
22908
  id: idProp,
22685
22909
  className,
22686
22910
  children,
22911
+ ref,
22687
22912
  ...rest
22688
22913
  }) {
22689
22914
  const { size, labels, registerBar, focusFieldIfLive } = useComposerContext();
22915
+ const appear = useEnterOnAppear();
22916
+ const mergedRef = useMergedRefs(appear.ref, ref);
22690
22917
  const ownId = React68.useId();
22691
22918
  const id = idProp ?? ownId;
22692
22919
  const dismissRef = React68.useRef(onDismiss);
@@ -22711,8 +22938,9 @@ function ComposerContext({
22711
22938
  "div",
22712
22939
  {
22713
22940
  ...rest,
22941
+ ref: mergedRef,
22714
22942
  id,
22715
- className: cx(Composer_default.context, enterMotion_default.enter, className),
22943
+ className: cx(Composer_default.context, appear.entering && enterMotion_default.enter, className),
22716
22944
  "data-mode": mode,
22717
22945
  children: [
22718
22946
  /* @__PURE__ */ jsx60("span", { className: Composer_default.contextIcon, "aria-hidden": "true", children: /* @__PURE__ */ jsx60(GlyphSwap, { children: /* @__PURE__ */ jsx60(Icon, { name: CONTEXT_ICON[mode] }) }) }),
@@ -22815,6 +23043,119 @@ function ComposerItemIcon(props) {
22815
23043
  return /* @__PURE__ */ jsx60(Dropdown.ItemIcon, { ...props });
22816
23044
  }
22817
23045
  ComposerItemIcon.displayName = "Composer.ItemIcon";
23046
+ var keyLabel = (key) => typeof key === "string" ? key : key.label;
23047
+ function ComposerKeyboard({
23048
+ rows: rows2,
23049
+ placeholder,
23050
+ oneTime = false,
23051
+ open: openProp,
23052
+ defaultOpen = true,
23053
+ onOpenChange,
23054
+ id: idProp,
23055
+ className,
23056
+ "aria-label": ariaLabel,
23057
+ ref,
23058
+ ...rest
23059
+ }) {
23060
+ const {
23061
+ labels,
23062
+ disabled,
23063
+ keyboardSlot,
23064
+ keyboardToggleSlot,
23065
+ setKeyboardPlaceholder,
23066
+ sendText,
23067
+ focusFieldIfLive,
23068
+ recording
23069
+ } = useComposerContext();
23070
+ const [open, setOpen] = useControllableState({
23071
+ value: openProp,
23072
+ defaultValue: defaultOpen,
23073
+ onChange: onOpenChange
23074
+ });
23075
+ const { pending, track: track2 } = usePendingKeys();
23076
+ const autoId = React68.useId();
23077
+ const id = idProp ?? autoId;
23078
+ React68.useEffect(() => {
23079
+ if (!open || placeholder === void 0) return;
23080
+ setKeyboardPlaceholder(placeholder);
23081
+ return () => setKeyboardPlaceholder(null);
23082
+ }, [open, placeholder, setKeyboardPlaceholder]);
23083
+ const press = (key, position) => {
23084
+ const outcome = track2(position, sendText(keyLabel(key)));
23085
+ if (!oneTime) return;
23086
+ const hide = () => {
23087
+ setOpen(false);
23088
+ focusFieldIfLive();
23089
+ };
23090
+ if (isPromiseLike(outcome)) outcome.then(hide, () => {
23091
+ });
23092
+ else hide();
23093
+ };
23094
+ if (!keyboardSlot || !keyboardToggleSlot) return null;
23095
+ const toggleIcon = open ? "nav.chevronDown" : "nav.layoutGrid";
23096
+ return /* @__PURE__ */ jsxs45(Fragment33, { children: [
23097
+ createPortal2(
23098
+ /* @__PURE__ */ jsx60(
23099
+ Button.Root,
23100
+ {
23101
+ variant: "ghost",
23102
+ tone: "neutral",
23103
+ "aria-label": ariaLabel ?? labels.keyboard,
23104
+ "aria-expanded": open,
23105
+ "aria-controls": id,
23106
+ disabled,
23107
+ onClick: () => setOpen(!open),
23108
+ children: /* @__PURE__ */ jsx60(Button.Icon, { children: /* @__PURE__ */ jsx60(Icon, { name: toggleIcon }) })
23109
+ }
23110
+ ),
23111
+ keyboardToggleSlot
23112
+ ),
23113
+ createPortal2(
23114
+ /* @__PURE__ */ jsx60(
23115
+ Disclosure,
23116
+ {
23117
+ ...rest,
23118
+ ref,
23119
+ id,
23120
+ role: "group",
23121
+ "aria-label": ariaLabel ?? labels.keyboard,
23122
+ open,
23123
+ inert: recording || void 0,
23124
+ className,
23125
+ children: /* @__PURE__ */ jsx60("div", { className: Composer_default.keyboardKeys, children: rows2.map((row, rowIndex) => /* @__PURE__ */ jsx60(
23126
+ "div",
23127
+ {
23128
+ className: Composer_default.keyboardRow,
23129
+ children: row.map((key, keyIndex) => {
23130
+ const position = `${rowIndex}:${keyIndex}`;
23131
+ const custom = typeof key === "string" ? void 0 : key;
23132
+ return /* @__PURE__ */ jsxs45(
23133
+ Button.Root,
23134
+ {
23135
+ variant: "soft",
23136
+ tone: custom?.tone ?? "neutral",
23137
+ fullWidth: true,
23138
+ disabled,
23139
+ loading: pending.has(position),
23140
+ onClick: () => press(key, position),
23141
+ children: [
23142
+ custom?.icon ? /* @__PURE__ */ jsx60(Button.Icon, { children: custom.icon }) : null,
23143
+ keyLabel(key)
23144
+ ]
23145
+ },
23146
+ position
23147
+ );
23148
+ })
23149
+ },
23150
+ rowIndex
23151
+ )) })
23152
+ }
23153
+ ),
23154
+ keyboardSlot
23155
+ )
23156
+ ] });
23157
+ }
23158
+ ComposerKeyboard.displayName = "Composer.Keyboard";
22818
23159
  var Composer = {
22819
23160
  Root: ComposerRoot,
22820
23161
  Context: ComposerContext,
@@ -22822,7 +23163,8 @@ var Composer = {
22822
23163
  Description: ComposerDescription,
22823
23164
  Attach: ComposerAttach,
22824
23165
  Item: ComposerItem,
22825
- ItemIcon: ComposerItemIcon
23166
+ ItemIcon: ComposerItemIcon,
23167
+ Keyboard: ComposerKeyboard
22826
23168
  };
22827
23169
 
22828
23170
  // src/components/data-table/DataTable.tsx
@@ -23513,14 +23855,16 @@ function flatten(data, options) {
23513
23855
  }
23514
23856
 
23515
23857
  // src/components/data-table/Row.tsx
23516
- import { Fragment as Fragment32, jsx as jsx65, jsxs as jsxs50 } from "react/jsx-runtime";
23858
+ import { Fragment as Fragment34, jsx as jsx65, jsxs as jsxs50 } from "react/jsx-runtime";
23517
23859
  function columnAlign(column) {
23518
23860
  return column.align ?? (column.numeric ? "end" : "start");
23519
23861
  }
23520
- function columnSizeStyle(column) {
23521
- const { width, minWidth, maxWidth, grow } = column;
23522
- if (!width && !minWidth && !maxWidth && !grow) return void 0;
23523
- return { width: width ?? (grow ? "100%" : void 0), minWidth, maxWidth };
23862
+ function columnSizeProps(column) {
23863
+ const { width, minWidth = width, maxWidth, grow } = column;
23864
+ return {
23865
+ style: width || minWidth || maxWidth ? { width, minWidth, maxWidth } : void 0,
23866
+ "data-grow": grow ? "true" : void 0
23867
+ };
23524
23868
  }
23525
23869
  function renderCell(row, column, withTitle) {
23526
23870
  const value = column.cell ? void 0 : columnValue(row, column);
@@ -23574,7 +23918,7 @@ function DataTableRowImpl({
23574
23918
  const enter = animate && !foldable && enterMotion_default.enterBase;
23575
23919
  const lead = cx(DataTable_default.cell, enter, shared.stickyFirstColumn && DataTable_default.stickyLead);
23576
23920
  const folded = (node) => foldable ? /* @__PURE__ */ jsx65(Disclosure, { open: !folding, appear: animate, children: /* @__PURE__ */ jsx65("div", { className: DataTable_default.foldPad, children: node }) }) : node;
23577
- return /* @__PURE__ */ jsxs50(Fragment32, { children: [
23921
+ return /* @__PURE__ */ jsxs50(Fragment34, { children: [
23578
23922
  /* @__PURE__ */ jsxs50(
23579
23923
  RowElement,
23580
23924
  {
@@ -23670,7 +24014,7 @@ function DataTableRowImpl({
23670
24014
  shared.stickyLastColumn && isLastColumn && DataTable_default.lastColumnSticky,
23671
24015
  enter
23672
24016
  ),
23673
- style: columnSizeStyle(column),
24017
+ ...columnSizeProps(column),
23674
24018
  "data-align": columnAlign(column),
23675
24019
  "data-numeric": column.numeric ? "true" : void 0,
23676
24020
  "data-first-column": isFirstColumn ? "true" : void 0,
@@ -23681,7 +24025,7 @@ function DataTableRowImpl({
23681
24025
  folded(
23682
24026
  /* @__PURE__ */ jsx65("a", { href, className: DataTable_default.rowLink, "data-row-link": "", children: renderCell(row, column, true) })
23683
24027
  )
23684
- ) : /* @__PURE__ */ jsxs50(Fragment32, { children: [
24028
+ ) : /* @__PURE__ */ jsxs50(Fragment34, { children: [
23685
24029
  /* @__PURE__ */ jsx65(
23686
24030
  "a",
23687
24031
  {
@@ -23808,7 +24152,7 @@ function MeasureBody({
23808
24152
  "td",
23809
24153
  {
23810
24154
  className: DataTable_default.cell,
23811
- style: columnSizeStyle(column),
24155
+ ...columnSizeProps(column),
23812
24156
  "data-align": columnAlign(column),
23813
24157
  "data-numeric": column.numeric ? "true" : void 0,
23814
24158
  "data-first-column": columnIndex === 0 ? "true" : void 0,
@@ -23824,7 +24168,7 @@ function MeasureBody({
23824
24168
  }
23825
24169
 
23826
24170
  // src/components/data-table/Head.tsx
23827
- import { Fragment as Fragment33, jsx as jsx66, jsxs as jsxs51 } from "react/jsx-runtime";
24171
+ import { Fragment as Fragment35, jsx as jsx66, jsxs as jsxs51 } from "react/jsx-runtime";
23828
24172
  var ARIA_SORT = { asc: "ascending", desc: "descending" };
23829
24173
  var SORT_ICON = { asc: "sort.ascending", desc: "sort.descending" };
23830
24174
  var columnLabel2 = (column) => nodeText(column.header) || column.id;
@@ -23852,7 +24196,7 @@ function Head({
23852
24196
  stickyHeader && (pinned ? DataTable_default.cornerCellSticky : DataTable_default.headSticky)
23853
24197
  );
23854
24198
  const lead = cx(headCell(stickyFirstColumn), stickyFirstColumn && DataTable_default.stickyLead);
23855
- const leading = /* @__PURE__ */ jsxs51(Fragment33, { children: [
24199
+ const leading = /* @__PURE__ */ jsxs51(Fragment35, { children: [
23856
24200
  gripStart ? /* @__PURE__ */ jsx66("td", { className: cx(lead, DataTable_default.handleCell) }) : null,
23857
24201
  selectAll ? /* @__PURE__ */ jsx66("th", { scope: "col", className: cx(lead, DataTable_default.selectCell), children: /* @__PURE__ */ jsx66(
23858
24202
  Checkbox.Root,
@@ -23915,7 +24259,7 @@ function Head({
23915
24259
  )
23916
24260
  ]
23917
24261
  }
23918
- ) }) : column.hideHeader ? /* @__PURE__ */ jsxs51(Fragment33, { children: [
24262
+ ) }) : column.hideHeader ? /* @__PURE__ */ jsxs51(Fragment35, { children: [
23919
24263
  /* @__PURE__ */ jsx66(VisuallyHidden, { id: labelId, children: column.header }),
23920
24264
  menuHere ? /* @__PURE__ */ jsx66("span", { className: DataTable_default.headMenu, children: columnsMenu }) : null
23921
24265
  ] }) : /* @__PURE__ */ jsxs51("span", { className: DataTable_default.headTitle, children: [
@@ -23931,7 +24275,7 @@ function Head({
23931
24275
  stickyFirstColumn && isFirstColumn && DataTable_default.firstColumnSticky,
23932
24276
  stickyLastColumn && isLastColumn && DataTable_default.lastColumnSticky
23933
24277
  ),
23934
- style: columnSizeStyle(column),
24278
+ ...columnSizeProps(column),
23935
24279
  "data-align": column.headerAlign ?? "start",
23936
24280
  "data-sorted": order ? "true" : void 0,
23937
24281
  "aria-sort": column.sortable ? order ? ARIA_SORT[order] : "none" : void 0,
@@ -23941,7 +24285,7 @@ function Head({
23941
24285
  "aria-describedby": described ? descriptionId : void 0,
23942
24286
  onClick: column.sortable ? () => onSort(column.id) : void 0
23943
24287
  },
23944
- content: /* @__PURE__ */ jsxs51(Fragment33, { children: [
24288
+ content: /* @__PURE__ */ jsxs51(Fragment35, { children: [
23945
24289
  label,
23946
24290
  described ? /* @__PURE__ */ jsx66("span", { id: descriptionId, hidden: true, children: column.description }) : null
23947
24291
  ] })
@@ -23996,8 +24340,29 @@ function WithDescription({
23996
24340
  ] });
23997
24341
  }
23998
24342
 
23999
- // src/components/data-table/StateRows.tsx
24343
+ // src/components/data-table/SelectionMenu.tsx
24000
24344
  import { jsx as jsx67, jsxs as jsxs52 } from "react/jsx-runtime";
24345
+ function SelectionMenu({ selected, actions, onClear, labels, size }) {
24346
+ const name = labels.selectionActions;
24347
+ return /* @__PURE__ */ jsxs52(Dropdown.Root, { children: [
24348
+ /* @__PURE__ */ jsx67(Dropdown.Trigger, { children: /* @__PURE__ */ jsxs52(Button.Root, { "aria-label": `${name} ${selected.length}`, variant: "soft", tone: "neutral", children: [
24349
+ name,
24350
+ /* @__PURE__ */ jsx67(Badge.Root, { children: selected.length }),
24351
+ /* @__PURE__ */ jsx67(Button.Icon, { children: /* @__PURE__ */ jsx67(Icon, { name: "nav.chevronDown" }) })
24352
+ ] }) }),
24353
+ /* @__PURE__ */ jsxs52(Dropdown.Content, { side: "bottom", align: "end", size, children: [
24354
+ /* @__PURE__ */ jsxs52(Dropdown.Item, { onSelect: onClear, children: [
24355
+ /* @__PURE__ */ jsx67(Dropdown.ItemIcon, { children: /* @__PURE__ */ jsx67(Icon, { name: "action.close" }) }),
24356
+ labels.clearSelection
24357
+ ] }),
24358
+ /* @__PURE__ */ jsx67(Dropdown.Separator, {}),
24359
+ actions
24360
+ ] })
24361
+ ] });
24362
+ }
24363
+
24364
+ // src/components/data-table/StateRows.tsx
24365
+ import { jsx as jsx68, jsxs as jsxs53 } from "react/jsx-runtime";
24001
24366
  function StateRows({
24002
24367
  state,
24003
24368
  columns,
@@ -24013,28 +24378,28 @@ function StateRows({
24013
24378
  skeletonRows
24014
24379
  }) {
24015
24380
  if (state === "error") {
24016
- return /* @__PURE__ */ jsx67("tr", { children: /* @__PURE__ */ jsx67("td", { colSpan: totalColumns, className: cx(DataTable_default.stateCell, DataTable_default.stateError), children: /* @__PURE__ */ jsx67("div", { className: DataTable_default.stateBox, children: /* @__PURE__ */ jsx67("div", { className: DataTable_default.stateContent, role: "alert", children: loadError }) }) }) });
24381
+ return /* @__PURE__ */ jsx68("tr", { children: /* @__PURE__ */ jsx68("td", { colSpan: totalColumns, className: cx(DataTable_default.stateCell, DataTable_default.stateError), children: /* @__PURE__ */ jsx68("div", { className: DataTable_default.stateBox, children: /* @__PURE__ */ jsx68("div", { className: DataTable_default.stateContent, role: "alert", children: loadError }) }) }) });
24017
24382
  }
24018
24383
  if (state === "empty") {
24019
- return /* @__PURE__ */ jsx67("tr", { children: /* @__PURE__ */ jsx67("td", { colSpan: totalColumns, className: DataTable_default.stateCell, children: /* @__PURE__ */ jsx67("div", { className: DataTable_default.stateBox, children: empty == null || typeof empty === "string" ? /* @__PURE__ */ jsx67(EmptyPage.Root, { layout: "compact", size, role: "status", children: /* @__PURE__ */ jsx67(EmptyPage.Description, { children: empty ?? emptyLabel }) }) : /* @__PURE__ */ jsx67("div", { className: DataTable_default.stateContent, children: empty }) }) }) });
24384
+ return /* @__PURE__ */ jsx68("tr", { children: /* @__PURE__ */ jsx68("td", { colSpan: totalColumns, className: DataTable_default.stateCell, children: /* @__PURE__ */ jsx68("div", { className: DataTable_default.stateBox, children: empty == null || typeof empty === "string" ? /* @__PURE__ */ jsx68(EmptyPage.Root, { layout: "compact", size, role: "status", children: /* @__PURE__ */ jsx68(EmptyPage.Description, { children: empty ?? emptyLabel }) }) : /* @__PURE__ */ jsx68("div", { className: DataTable_default.stateContent, children: empty }) }) }) });
24020
24385
  }
24021
24386
  return Array.from({ length: skeletonRows }, (_, rowIndex) => (
24022
24387
  // biome-ignore lint/suspicious/noArrayIndexKey: static placeholder rows
24023
- /* @__PURE__ */ jsxs52("tr", { className: cx(DataTable_default.row, DataTable_default.skeletonRow), "data-skeleton": "true", children: [
24024
- gripStart ? /* @__PURE__ */ jsx67("td", { className: cx(DataTable_default.cell, DataTable_default.handleCell) }) : null,
24025
- selectable ? /* @__PURE__ */ jsx67("td", { className: cx(DataTable_default.cell, DataTable_default.selectCell), children: /* @__PURE__ */ jsx67(Skeleton, { shape: "block", className: DataTable_default.skeletonChoice }) }) : null,
24026
- expandEnabled ? /* @__PURE__ */ jsx67("td", { className: cx(DataTable_default.cell, DataTable_default.toggleCell) }) : null,
24027
- columns.map((column) => /* @__PURE__ */ jsx67(
24388
+ /* @__PURE__ */ jsxs53("tr", { className: cx(DataTable_default.row, DataTable_default.skeletonRow), "data-skeleton": "true", children: [
24389
+ gripStart ? /* @__PURE__ */ jsx68("td", { className: cx(DataTable_default.cell, DataTable_default.handleCell) }) : null,
24390
+ selectable ? /* @__PURE__ */ jsx68("td", { className: cx(DataTable_default.cell, DataTable_default.selectCell), children: /* @__PURE__ */ jsx68(Skeleton, { shape: "block", className: DataTable_default.skeletonChoice }) }) : null,
24391
+ expandEnabled ? /* @__PURE__ */ jsx68("td", { className: cx(DataTable_default.cell, DataTable_default.toggleCell) }) : null,
24392
+ columns.map((column) => /* @__PURE__ */ jsx68(
24028
24393
  "td",
24029
24394
  {
24030
24395
  className: DataTable_default.cell,
24031
- style: columnSizeStyle(column),
24396
+ ...columnSizeProps(column),
24032
24397
  "data-align": columnAlign(column),
24033
- children: /* @__PURE__ */ jsx67(Skeleton, { className: DataTable_default.skeleton })
24398
+ children: /* @__PURE__ */ jsx68(Skeleton, { className: DataTable_default.skeleton })
24034
24399
  },
24035
24400
  column.id
24036
24401
  )),
24037
- endCell ? /* @__PURE__ */ jsx67("td", { className: cx(DataTable_default.cell, DataTable_default.endCell) }) : null
24402
+ endCell ? /* @__PURE__ */ jsx68("td", { className: cx(DataTable_default.cell, DataTable_default.endCell) }) : null
24038
24403
  ] }, rowIndex)
24039
24404
  ));
24040
24405
  }
@@ -24091,8 +24456,15 @@ function unfreeze(table, frozen) {
24091
24456
  }
24092
24457
  function release(table) {
24093
24458
  table.style.tableLayout = "";
24459
+ table.style.minWidth = "";
24460
+ table.dataset.measuring = "true";
24094
24461
  for (const col of colsOf(table)) col.style.width = "";
24095
24462
  }
24463
+ function measureReleased(table) {
24464
+ const result = measure2(table);
24465
+ delete table.dataset.measuring;
24466
+ return result;
24467
+ }
24096
24468
  function measure2(table) {
24097
24469
  const cols = colsOf(table);
24098
24470
  const lead = table.tHead?.rows[0] ?? [...table.querySelectorAll(":scope > tbody > tr")].find(
@@ -24106,7 +24478,7 @@ function measure2(table) {
24106
24478
  }
24107
24479
  function freeze(table, frozen) {
24108
24480
  release(table);
24109
- const result = measure2(table);
24481
+ const result = measureReleased(table);
24110
24482
  if (result) apply(table, frozen, result);
24111
24483
  }
24112
24484
  var refreeze = /* @__PURE__ */ new Map();
@@ -24123,7 +24495,7 @@ function scheduleRefreeze(table, frozen) {
24123
24495
  node.style.minWidth = "";
24124
24496
  release(node);
24125
24497
  }
24126
- const measured = tables.map(([node]) => measure2(node));
24498
+ const measured = tables.map(([node]) => measureReleased(node));
24127
24499
  tables.forEach(([node, state], index) => {
24128
24500
  const result = measured[index];
24129
24501
  if (result) apply(node, state, result);
@@ -24139,7 +24511,7 @@ function apply(table, frozen, { cols, measured, minimums }) {
24139
24511
  cols.forEach((col, index) => {
24140
24512
  const grows = col.dataset.grow === "true";
24141
24513
  if (!grows) col.style.width = `${next[index]}px`;
24142
- floor += grows ? minimums[index] ?? 0 : next[index] ?? 0;
24514
+ floor += grows ? Math.max(measured[index] ?? 0, minimums[index] ?? 0) : next[index] ?? 0;
24143
24515
  });
24144
24516
  table.style.tableLayout = "fixed";
24145
24517
  table.style.minWidth = `${floor}px`;
@@ -24334,18 +24706,20 @@ function useRowSelection({
24334
24706
  commit(next);
24335
24707
  };
24336
24708
  return {
24709
+ selectedKeys,
24337
24710
  selectedSet,
24338
24711
  allSelected,
24339
24712
  someSelected: selectedInData > 0 && !allSelected,
24340
24713
  announcement,
24341
24714
  dragging: range.dragging,
24342
24715
  toggleAll,
24716
+ clear: () => commit(/* @__PURE__ */ new Set()),
24343
24717
  handlers
24344
24718
  };
24345
24719
  }
24346
24720
 
24347
24721
  // src/components/data-table/DataTable.tsx
24348
- import { jsx as jsx68, jsxs as jsxs53 } from "react/jsx-runtime";
24722
+ import { jsx as jsx69, jsxs as jsxs54 } from "react/jsx-runtime";
24349
24723
  var DATA_TABLE_LABELS = {
24350
24724
  loading: "\u0417\u0430\u0433\u0440\u0443\u0437\u043A\u0430 \u0434\u0430\u043D\u043D\u044B\u0445\u2026",
24351
24725
  empty: "\u041D\u0435\u0442 \u0434\u0430\u043D\u043D\u044B\u0445 \u0434\u043B\u044F \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u044F.",
@@ -24355,6 +24729,8 @@ var DATA_TABLE_LABELS = {
24355
24729
  selectAll: "\u0412\u044B\u0431\u0440\u0430\u0442\u044C \u0432\u0441\u0435 \u0441\u0442\u0440\u043E\u043A\u0438",
24356
24730
  selectRow: "\u0412\u044B\u0431\u0440\u0430\u0442\u044C \u0441\u0442\u0440\u043E\u043A\u0443 {label}",
24357
24731
  selectedCount: "\u0412\u044B\u0431\u0440\u0430\u043D\u043E: {count}",
24732
+ selectionActions: "\u0414\u0435\u0439\u0441\u0442\u0432\u0438\u044F",
24733
+ clearSelection: "\u0421\u043D\u044F\u0442\u044C \u0432\u044B\u0431\u043E\u0440",
24358
24734
  expand: "\u0420\u0430\u0437\u0432\u0435\u0440\u043D\u0443\u0442\u044C \u0441\u0442\u0440\u043E\u043A\u0443 {label}",
24359
24735
  collapse: "\u0421\u0432\u0435\u0440\u043D\u0443\u0442\u044C \u0441\u0442\u0440\u043E\u043A\u0443 {label}",
24360
24736
  columns: "\u041A\u043E\u043B\u043E\u043D\u043A\u0438",
@@ -24462,6 +24838,7 @@ function DataTable({
24462
24838
  loadingRows,
24463
24839
  toolbar,
24464
24840
  toolbarChips,
24841
+ renderSelectionActions,
24465
24842
  getRowGroup,
24466
24843
  renderGroupHeader,
24467
24844
  stickyGroupHeaders = false,
@@ -24760,11 +25137,21 @@ function DataTable({
24760
25137
  tableRef,
24761
25138
  announce: (count) => formatLabel(labels.selectedCount, { count })
24762
25139
  });
25140
+ const selectedKeys = selection.selectedKeys ?? EMPTY_KEYS;
25141
+ const showSelectionActions = renderSelectionActions != null && selectedKeys.length > 0;
25142
+ const selectionActions = usePartPresence({
25143
+ present: showSelectionActions,
25144
+ axis: "inline"
25145
+ });
25146
+ const hasToolbar = toolbar != null || toolbarChips != null || showSelectionActions;
25147
+ const toolbarPresence = usePartPresence({ present: hasToolbar, axis: "block" });
24763
25148
  const hasError = loadError != null && loadError !== false;
24764
25149
  const showSkeleton = !hasError && loading && displayedCount === 0;
24765
25150
  const showEmpty = !hasError && !loading && displayedCount === 0;
24766
25151
  const bodyState = hasError ? "error" : showSkeleton ? "loading" : showEmpty ? "empty" : "rows";
24767
- const { key: bodyKey, className: swapClass } = useSwapIn(`${bodyState}-${rowArrival.batch}`);
25152
+ const { key: bodyKey, className: swapClass } = useSwapIn(
25153
+ bodyState === "loading" ? bodyState : `${bodyState}-${rowArrival.batch}`
25154
+ );
24768
25155
  const rowHandle = reorder.enabled ? reorderHandle : null;
24769
25156
  const gripStart = rowHandle === "start";
24770
25157
  const gripEnd = rowHandle === "end";
@@ -24935,7 +25322,7 @@ function DataTable({
24935
25322
  onReorder: (id, beforeId) => setOrderState(moveBefore(orderIds, id, beforeId, (each) => each)),
24936
25323
  reset: orderIds.join("\0") === defaultOrder ? null : () => setOrderState(allColumns.map((column) => column.id))
24937
25324
  } : null;
24938
- const columnsMenuTrigger = menuInHead ? /* @__PURE__ */ jsx68(
25325
+ const columnsMenuTrigger = menuInHead ? /* @__PURE__ */ jsx69(
24939
25326
  ColumnsMenu,
24940
25327
  {
24941
25328
  columns: orderedColumns,
@@ -24950,7 +25337,7 @@ function DataTable({
24950
25337
  const rowOpens = Boolean(getRowHref || onRowClick);
24951
25338
  const renderRow = (item, index, inWindow = false) => {
24952
25339
  const opens = rowOpens && (isRowClickable?.(item.row) ?? true);
24953
- return /* @__PURE__ */ jsx68(
25340
+ return /* @__PURE__ */ jsx69(
24954
25341
  DataTableRow,
24955
25342
  {
24956
25343
  shared,
@@ -24977,7 +25364,7 @@ function DataTable({
24977
25364
  };
24978
25365
  const spacerRow = (key, height) => height > 0 ? (
24979
25366
  // biome-ignore lint/a11y/noAriaHiddenOnFocusable: a spacer `<tr>` holds nothing focusable
24980
- /* @__PURE__ */ jsx68("tr", { className: DataTable_default.spacerRow, "aria-hidden": "true", children: /* @__PURE__ */ jsx68("td", { colSpan: totalColumns, className: DataTable_default.spacerCell, style: { height } }) }, key)
25367
+ /* @__PURE__ */ jsx69("tr", { className: DataTable_default.spacerRow, "aria-hidden": "true", children: /* @__PURE__ */ jsx69("td", { colSpan: totalColumns, className: DataTable_default.spacerCell, style: { height } }) }, key)
24981
25368
  ) : null;
24982
25369
  const renderWindow = () => {
24983
25370
  const laid = rowGaps(virtual);
@@ -24997,7 +25384,7 @@ function DataTable({
24997
25384
  const { key } = segment;
24998
25385
  const group = groups.get(key);
24999
25386
  const collapsed = collapsedSet.has(key);
25000
- return /* @__PURE__ */ jsx68(
25387
+ return /* @__PURE__ */ jsx69(
25001
25388
  GroupRow,
25002
25389
  {
25003
25390
  totalColumns,
@@ -25016,8 +25403,8 @@ function DataTable({
25016
25403
  }
25017
25404
  );
25018
25405
  };
25019
- return /* @__PURE__ */ jsx68(ReorderRoot, { enabled: reorder.enabled || reorderColumns && showHeader, children: /* @__PURE__ */ jsx68(SurfaceDepthProvider, { value: depth, children: tier.provide(
25020
- /* @__PURE__ */ jsxs53(
25406
+ return /* @__PURE__ */ jsx69(ReorderRoot, { enabled: reorder.enabled || reorderColumns && showHeader, children: /* @__PURE__ */ jsx69(SurfaceDepthProvider, { value: depth, children: tier.provide(
25407
+ /* @__PURE__ */ jsxs54(
25021
25408
  "div",
25022
25409
  {
25023
25410
  ...rest,
@@ -25046,11 +25433,38 @@ function DataTable({
25046
25433
  "scroll-height": fillHeight ? "fill" : void 0
25047
25434
  }),
25048
25435
  children: [
25049
- toolbar != null || toolbarChips != null ? /* @__PURE__ */ jsxs53("div", { className: DataTable_default.toolbar, children: [
25050
- toolbar != null ? /* @__PURE__ */ jsx68(ToolRow, { children: toolbar }) : null,
25051
- toolbarChips != null ? /* @__PURE__ */ jsx68(ToolChips, { children: toolbarChips }) : null
25052
- ] }) : null,
25053
- /* @__PURE__ */ jsx68("div", { className: cx(fieldTierClass, DataTable_default.frame), "data-size": compactTier(size), children: /* @__PURE__ */ jsxs53(
25436
+ hasToolbar ? /* @__PURE__ */ jsxs54(
25437
+ "div",
25438
+ {
25439
+ ref: toolbarPresence.ref,
25440
+ className: cx(DataTable_default.toolbar, toolbarPresence.className),
25441
+ children: [
25442
+ toolbar != null || showSelectionActions ? /* @__PURE__ */ jsxs54(ToolRow, { children: [
25443
+ toolbar,
25444
+ showSelectionActions ? /* @__PURE__ */ jsx69(
25445
+ ToolCell,
25446
+ {
25447
+ ref: selectionActions.ref,
25448
+ className: selectionActions.className,
25449
+ children: /* @__PURE__ */ jsx69(
25450
+ SelectionMenu,
25451
+ {
25452
+ selected: selectedKeys,
25453
+ actions: renderSelectionActions(selectedKeys),
25454
+ onClear: selection.clear,
25455
+ labels,
25456
+ size
25457
+ }
25458
+ )
25459
+ },
25460
+ "\\u0000selection"
25461
+ ) : null
25462
+ ] }) : null,
25463
+ toolbarChips != null ? /* @__PURE__ */ jsx69(ToolChips, { children: toolbarChips }) : null
25464
+ ]
25465
+ }
25466
+ ) : null,
25467
+ /* @__PURE__ */ jsx69("div", { className: cx(fieldTierClass, DataTable_default.frame), "data-size": compactTier(size), children: /* @__PURE__ */ jsxs54(
25054
25468
  ScrollContainer,
25055
25469
  {
25056
25470
  ref: scrollRef,
@@ -25061,7 +25475,7 @@ function DataTable({
25061
25475
  "data-size": "xs",
25062
25476
  style: { maxHeight: typeof maxHeight === "number" ? `${maxHeight}px` : maxHeight },
25063
25477
  children: [
25064
- /* @__PURE__ */ jsxs53(
25478
+ /* @__PURE__ */ jsxs54(
25065
25479
  "table",
25066
25480
  {
25067
25481
  ref: mergedTableRef,
@@ -25071,14 +25485,14 @@ function DataTable({
25071
25485
  "aria-rowcount": virtualized ? flatRows.length + headRows : void 0,
25072
25486
  ...columnHover,
25073
25487
  children: [
25074
- /* @__PURE__ */ jsxs53("colgroup", { children: [
25075
- gripStart ? /* @__PURE__ */ jsx68("col", {}) : null,
25076
- selectable ? /* @__PURE__ */ jsx68("col", {}) : null,
25077
- expandEnabled ? /* @__PURE__ */ jsx68("col", {}) : null,
25078
- columns.map((column) => /* @__PURE__ */ jsx68("col", { "data-grow": column.grow ? "true" : void 0 }, column.id)),
25079
- endCell ? /* @__PURE__ */ jsx68("col", {}) : null
25488
+ /* @__PURE__ */ jsxs54("colgroup", { children: [
25489
+ gripStart ? /* @__PURE__ */ jsx69("col", {}) : null,
25490
+ selectable ? /* @__PURE__ */ jsx69("col", {}) : null,
25491
+ expandEnabled ? /* @__PURE__ */ jsx69("col", {}) : null,
25492
+ columns.map((column) => /* @__PURE__ */ jsx69("col", { "data-grow": column.grow ? "true" : void 0 }, column.id)),
25493
+ endCell ? /* @__PURE__ */ jsx69("col", {}) : null
25080
25494
  ] }),
25081
- showHeader ? /* @__PURE__ */ jsx68(
25495
+ showHeader ? /* @__PURE__ */ jsx69(
25082
25496
  Head,
25083
25497
  {
25084
25498
  columns,
@@ -25103,7 +25517,7 @@ function DataTable({
25103
25517
  } : void 0
25104
25518
  }
25105
25519
  ) : null,
25106
- reorder.enabled && bodyState === "rows" ? /* @__PURE__ */ jsx68(React77.Fragment, { children: segments.map((segment) => /* @__PURE__ */ jsx68(
25520
+ reorder.enabled && bodyState === "rows" ? /* @__PURE__ */ jsx69(React77.Fragment, { children: segments.map((segment) => /* @__PURE__ */ jsx69(
25107
25521
  ReorderBody,
25108
25522
  {
25109
25523
  entries: segment.rows,
@@ -25117,10 +25531,10 @@ function DataTable({
25117
25531
  className: swapClass
25118
25532
  },
25119
25533
  `group-${String(segment.key)}`
25120
- )) }, bodyKey) : groups && bodyState === "rows" ? /* @__PURE__ */ jsx68(React77.Fragment, { children: segments.map((segment) => /* @__PURE__ */ jsxs53("tbody", { className: swapClass, children: [
25534
+ )) }, bodyKey) : groups && bodyState === "rows" ? /* @__PURE__ */ jsx69(React77.Fragment, { children: segments.map((segment) => /* @__PURE__ */ jsxs54("tbody", { className: swapClass, children: [
25121
25535
  groupHeader(segment),
25122
25536
  segment.rows.map(({ item, index }) => renderRow(item, index))
25123
- ] }, `group-${String(segment.key)}`)) }, bodyKey) : /* @__PURE__ */ jsx68("tbody", { className: swapClass, ...trackFocus, children: bodyState === "rows" ? virtualized ? renderWindow() : flat.rows.map((item, index) => renderRow(item, index)) : /* @__PURE__ */ jsx68(
25537
+ ] }, `group-${String(segment.key)}`)) }, bodyKey) : /* @__PURE__ */ jsx69("tbody", { className: swapClass, ...trackFocus, children: bodyState === "rows" ? virtualized ? renderWindow() : flat.rows.map((item, index) => renderRow(item, index)) : /* @__PURE__ */ jsx69(
25124
25538
  StateRows,
25125
25539
  {
25126
25540
  state: bodyState,
@@ -25140,7 +25554,7 @@ function DataTable({
25140
25554
  )
25141
25555
  }
25142
25556
  ) }, bodyKey),
25143
- flat.measure.length > 0 && !hasError ? /* @__PURE__ */ jsx68(
25557
+ flat.measure.length > 0 && !hasError ? /* @__PURE__ */ jsx69(
25144
25558
  MeasureBody,
25145
25559
  {
25146
25560
  rows: flat.measure,
@@ -25154,7 +25568,7 @@ function DataTable({
25154
25568
  ]
25155
25569
  }
25156
25570
  ),
25157
- infinite ? /* @__PURE__ */ jsx68(
25571
+ infinite ? /* @__PURE__ */ jsx69(
25158
25572
  "div",
25159
25573
  {
25160
25574
  ref: infiniteRows.sentinelRef,
@@ -25165,9 +25579,9 @@ function DataTable({
25165
25579
  ]
25166
25580
  }
25167
25581
  ) }),
25168
- showSkeleton ? /* @__PURE__ */ jsx68(VisuallyHidden, { live: "polite", children: labels.loading }) : null,
25169
- selectable ? /* @__PURE__ */ jsx68(VisuallyHidden, { live: "polite", children: selection.announcement }) : null,
25170
- /* @__PURE__ */ jsx68(
25582
+ showSkeleton ? /* @__PURE__ */ jsx69(VisuallyHidden, { live: "polite", children: labels.loading }) : null,
25583
+ selectable ? /* @__PURE__ */ jsx69(VisuallyHidden, { live: "polite", children: selection.announcement }) : null,
25584
+ /* @__PURE__ */ jsx69(
25171
25585
  Footer,
25172
25586
  {
25173
25587
  range: showRange ? formatLabel(labels.range, {
@@ -25187,7 +25601,7 @@ function DataTable({
25187
25601
 
25188
25602
  // src/components/data-table/DataTableColumnsMenu.tsx
25189
25603
  import * as React78 from "react";
25190
- import { jsx as jsx69 } from "react/jsx-runtime";
25604
+ import { jsx as jsx70 } from "react/jsx-runtime";
25191
25605
  var CHOOSER_LABELS = {
25192
25606
  columns: DATA_TABLE_LABELS.columns,
25193
25607
  showColumns: DATA_TABLE_LABELS.showColumns,
@@ -25220,7 +25634,7 @@ function DataTableColumnsMenu({
25220
25634
  onReorder: (id, beforeId) => onColumnOrderChange(moveBefore(ids, id, beforeId, idOf3)),
25221
25635
  reset: ids.join("\0") === defaultOrder.join("\0") ? null : () => onColumnOrderChange(defaultOrder)
25222
25636
  } : null;
25223
- return /* @__PURE__ */ jsx69(
25637
+ return /* @__PURE__ */ jsx70(
25224
25638
  ColumnsMenu,
25225
25639
  {
25226
25640
  columns: ordered,
@@ -25250,7 +25664,7 @@ var DescriptionList_default = {
25250
25664
  };
25251
25665
 
25252
25666
  // src/components/description-list/DescriptionList.tsx
25253
- import { Fragment as Fragment35, jsx as jsx70, jsxs as jsxs54 } from "react/jsx-runtime";
25667
+ import { Fragment as Fragment37, jsx as jsx71, jsxs as jsxs55 } from "react/jsx-runtime";
25254
25668
  var DESCRIPTION_LIST_LABELS = {
25255
25669
  empty: "\u2014",
25256
25670
  emptyText: "\u041D\u0435 \u0443\u043A\u0430\u0437\u0430\u043D\u043E"
@@ -25270,13 +25684,13 @@ function DescriptionListRoot({
25270
25684
  }) {
25271
25685
  const { size, provide } = useHostTier(sizeProp);
25272
25686
  const mergedLabels = useLabels(DESCRIPTION_LIST_LABELS, labels);
25273
- return /* @__PURE__ */ jsx70(
25687
+ return /* @__PURE__ */ jsx71(
25274
25688
  "dl",
25275
25689
  {
25276
25690
  ...rest,
25277
25691
  className: cx(fieldTierClass, DescriptionList_default.root, className),
25278
25692
  ...toDataAttributes({ size, orientation, align: align === "end" ? align : void 0 }),
25279
- children: /* @__PURE__ */ jsx70(DescriptionListContext.Provider, { value: { size, labels: mergedLabels }, children: provide(children) })
25693
+ children: /* @__PURE__ */ jsx71(DescriptionListContext.Provider, { value: { size, labels: mergedLabels }, children: provide(children) })
25280
25694
  }
25281
25695
  );
25282
25696
  }
@@ -25290,21 +25704,21 @@ function DescriptionListItem({ label, children, className, ...rest }) {
25290
25704
  );
25291
25705
  const value = parts.filter((child) => child !== action);
25292
25706
  const empty = value.length === 0 || value.every(isEmptyValue);
25293
- return /* @__PURE__ */ jsxs54("div", { ...rest, className: cx(DescriptionList_default.item, className), children: [
25294
- /* @__PURE__ */ jsx70("dt", { className: DescriptionList_default.label, children: label }),
25295
- /* @__PURE__ */ jsxs54("dd", { className: DescriptionList_default.value, "data-empty": empty || void 0, children: [
25296
- /* @__PURE__ */ jsx70("span", { className: DescriptionList_default.text, children: empty ? /* @__PURE__ */ jsxs54(Fragment35, { children: [
25297
- /* @__PURE__ */ jsx70("span", { "aria-hidden": "true", children: labels.empty }),
25298
- /* @__PURE__ */ jsx70(VisuallyHidden, { children: labels.emptyText })
25707
+ return /* @__PURE__ */ jsxs55("div", { ...rest, className: cx(DescriptionList_default.item, className), children: [
25708
+ /* @__PURE__ */ jsx71("dt", { className: DescriptionList_default.label, children: label }),
25709
+ /* @__PURE__ */ jsxs55("dd", { className: DescriptionList_default.value, "data-empty": empty || void 0, children: [
25710
+ /* @__PURE__ */ jsx71("span", { className: DescriptionList_default.text, children: empty ? /* @__PURE__ */ jsxs55(Fragment37, { children: [
25711
+ /* @__PURE__ */ jsx71("span", { "aria-hidden": "true", children: labels.empty }),
25712
+ /* @__PURE__ */ jsx71(VisuallyHidden, { children: labels.emptyText })
25299
25713
  ] }) : value }),
25300
- action ? /* @__PURE__ */ jsx70("span", { className: DescriptionList_default.action, children: action }) : null
25714
+ action ? /* @__PURE__ */ jsx71("span", { className: DescriptionList_default.action, children: action }) : null
25301
25715
  ] })
25302
25716
  ] });
25303
25717
  }
25304
25718
  DescriptionListItem.displayName = "DescriptionList.Item";
25305
25719
  function DescriptionListItemAction({ label, children, ...rest }) {
25306
25720
  const { size } = React79.useContext(DescriptionListContext);
25307
- return /* @__PURE__ */ jsx70(RowAction, { ...rest, label, size, children });
25721
+ return /* @__PURE__ */ jsx71(RowAction, { ...rest, label, size, children });
25308
25722
  }
25309
25723
  DescriptionListItemAction.displayName = "DescriptionList.ItemAction";
25310
25724
  var DescriptionList = {
@@ -25325,7 +25739,7 @@ var DigitInput_default = {
25325
25739
  };
25326
25740
 
25327
25741
  // src/components/digit-input/DigitInput.tsx
25328
- import { jsx as jsx71, jsxs as jsxs55 } from "react/jsx-runtime";
25742
+ import { jsx as jsx72, jsxs as jsxs56 } from "react/jsx-runtime";
25329
25743
  var DIGIT_INPUT_LABELS = {
25330
25744
  group: "\u041A\u043E\u0434",
25331
25745
  cell: "\u0426\u0438\u0444\u0440\u0430 {index} \u0438\u0437 {length}",
@@ -25410,6 +25824,13 @@ function DigitInput({
25410
25824
  if (next.length === length && !wasComplete) check(next);
25411
25825
  };
25412
25826
  const cells = Array.from({ length }, (_, index) => value[index] ?? "");
25827
+ const [mountCells] = React80.useState(cells);
25828
+ const [touched2, setTouched] = React80.useState(() => /* @__PURE__ */ new Set());
25829
+ const changed = cells.flatMap(
25830
+ (cell, index) => cell !== mountCells[index] && !touched2.has(index) ? [index] : []
25831
+ );
25832
+ if (changed.length > 0) setTouched(/* @__PURE__ */ new Set([...touched2, ...changed]));
25833
+ const inks = (index) => cells[index] !== "" && (touched2.has(index) || cells[index] !== mountCells[index]);
25413
25834
  const inputRefs = React80.useRef([]);
25414
25835
  const pendingFocusRef = React80.useRef(null);
25415
25836
  React80.useLayoutEffect(() => {
@@ -25470,7 +25891,7 @@ function DigitInput({
25470
25891
  commit(nextCells.join(""));
25471
25892
  };
25472
25893
  return tier.provide(
25473
- /* @__PURE__ */ jsx71(
25894
+ /* @__PURE__ */ jsx72(
25474
25895
  FieldFrame,
25475
25896
  {
25476
25897
  ...rest,
@@ -25486,7 +25907,7 @@ function DigitInput({
25486
25907
  optionalLabel: labels.optional,
25487
25908
  className: cx(DigitInput_default.frame, className),
25488
25909
  "data-full-width": fullWidth || void 0,
25489
- children: /* @__PURE__ */ jsxs55(
25910
+ children: /* @__PURE__ */ jsxs56(
25490
25911
  "fieldset",
25491
25912
  {
25492
25913
  "aria-label": ids.labelledBy ? void 0 : labels.group,
@@ -25513,7 +25934,7 @@ function DigitInput({
25513
25934
  if (!event.currentTarget.contains(event.relatedTarget)) setFocusIndex(null);
25514
25935
  },
25515
25936
  children: [
25516
- /* @__PURE__ */ jsx71(
25937
+ /* @__PURE__ */ jsx72(
25517
25938
  "span",
25518
25939
  {
25519
25940
  ref: ringRef,
@@ -25522,8 +25943,8 @@ function DigitInput({
25522
25943
  "data-visible": focusIndex !== null || void 0
25523
25944
  }
25524
25945
  ),
25525
- name ? /* @__PURE__ */ jsx71("input", { type: "hidden", name, value }) : null,
25526
- cells.map((cell, index) => /* @__PURE__ */ jsx71(
25946
+ name ? /* @__PURE__ */ jsx72("input", { type: "hidden", name, value }) : null,
25947
+ cells.map((cell, index) => /* @__PURE__ */ jsx72(
25527
25948
  "input",
25528
25949
  {
25529
25950
  ref: (el) => {
@@ -25544,7 +25965,7 @@ function DigitInput({
25544
25965
  fieldSurfaceClass,
25545
25966
  fieldCodeCellClass,
25546
25967
  DigitInput_default.cell,
25547
- cell ? enterMotion_default.enterInk : void 0
25968
+ inks(index) ? enterMotion_default.enterInk : void 0
25548
25969
  ),
25549
25970
  "data-focus-ring": "false",
25550
25971
  style: { "--digit-i": index },
@@ -25584,7 +26005,7 @@ function DigitInput({
25584
26005
  },
25585
26006
  index
25586
26007
  )),
25587
- /* @__PURE__ */ jsx71(VisuallyHidden, { live: "polite", children: verification?.state === "refused" ? verification.reason : "" })
26008
+ /* @__PURE__ */ jsx72(VisuallyHidden, { live: "polite", children: verification?.state === "refused" ? verification.reason : "" })
25588
26009
  ]
25589
26010
  }
25590
26011
  )
@@ -25599,10 +26020,10 @@ var Drawer_default = {
25599
26020
  };
25600
26021
 
25601
26022
  // src/components/drawer/Drawer.tsx
25602
- import { jsx as jsx72 } from "react/jsx-runtime";
26023
+ import { jsx as jsx73 } from "react/jsx-runtime";
25603
26024
  function DrawerRoot({ children, ...options }) {
25604
26025
  const state = useDialogRoot(options);
25605
- return /* @__PURE__ */ jsx72(DialogRootProvider, { value: state, children });
26026
+ return /* @__PURE__ */ jsx73(DialogRootProvider, { value: state, children });
25606
26027
  }
25607
26028
  DrawerRoot.displayName = "Drawer.Root";
25608
26029
  function DrawerContent({
@@ -25610,7 +26031,7 @@ function DrawerContent({
25610
26031
  size = OVERLAY_CONTENT_SIZE,
25611
26032
  ...props
25612
26033
  }) {
25613
- return /* @__PURE__ */ jsx72(
26034
+ return /* @__PURE__ */ jsx73(
25614
26035
  DialogPanel,
25615
26036
  {
25616
26037
  ...props,
@@ -25618,6 +26039,7 @@ function DrawerContent({
25618
26039
  panelClassName: Drawer_default.panel,
25619
26040
  swipe: "never",
25620
26041
  footerLayout: "end",
26042
+ focusStart: "container",
25621
26043
  "data-side": side,
25622
26044
  "data-size": size
25623
26045
  }
@@ -25671,7 +26093,7 @@ var ExampleFrame_default = {
25671
26093
  };
25672
26094
 
25673
26095
  // src/components/example-frame/ExampleFrame.tsx
25674
- import { jsx as jsx73, jsxs as jsxs56 } from "react/jsx-runtime";
26096
+ import { jsx as jsx74, jsxs as jsxs57 } from "react/jsx-runtime";
25675
26097
  var VIEWPORTS = ["desktop", "tablet", "mobile"];
25676
26098
  var EXAMPLE_FRAME_LABELS = {
25677
26099
  paneSwitch: "\u0412\u0438\u0434 \u043F\u0440\u0438\u043C\u0435\u0440\u0430",
@@ -25808,8 +26230,8 @@ function ExampleFrame({
25808
26230
  previousScheme.current = colorScheme;
25809
26231
  if (rootRef.current) suspendTransitions(rootRef.current);
25810
26232
  }, [colorScheme]);
25811
- return /* @__PURE__ */ jsxs56("div", { ...rest, ref: mergedRef, className: cx(ExampleFrame_default.root, className), "data-depth": depth, children: [
25812
- /* @__PURE__ */ jsx73(
26233
+ return /* @__PURE__ */ jsxs57("div", { ...rest, ref: mergedRef, className: cx(ExampleFrame_default.root, className), "data-depth": depth, children: [
26234
+ /* @__PURE__ */ jsx74(
25813
26235
  ExampleFrameToolbar,
25814
26236
  {
25815
26237
  code,
@@ -25823,7 +26245,7 @@ function ExampleFrame({
25823
26245
  onCopy
25824
26246
  }
25825
26247
  ),
25826
- /* @__PURE__ */ jsx73(RegionSwap, { state: pane, children: pane === "preview" ? /* @__PURE__ */ jsx73("div", { className: ExampleFrame_default.previewViewport, "data-viewport": viewport2, children: /* @__PURE__ */ jsx73(
26248
+ /* @__PURE__ */ jsx74(RegionSwap, { state: pane, children: pane === "preview" ? /* @__PURE__ */ jsx74("div", { className: ExampleFrame_default.previewViewport, "data-viewport": viewport2, children: /* @__PURE__ */ jsx74(
25827
26249
  ScrollContainer,
25828
26250
  {
25829
26251
  ref: stageRef,
@@ -25833,12 +26255,12 @@ function ExampleFrame({
25833
26255
  "data-preview-layout": previewLayout,
25834
26256
  "data-theme": colorScheme,
25835
26257
  "data-depth": stageDepth,
25836
- children: /* @__PURE__ */ jsx73(SurfaceDepthProvider, { value: stageDepth, children: /* @__PURE__ */ jsx73(AppShellBoundary, { children }) })
26258
+ children: /* @__PURE__ */ jsx74(SurfaceDepthProvider, { value: stageDepth, children: /* @__PURE__ */ jsx74(AppShellBoundary, { children }) })
25837
26259
  }
25838
26260
  ) }) : (
25839
26261
  // Plain CodeBlock is not focusable itself; the scrolling pane takes keyboard focus
25840
26262
  // instead. The pane carries the theme, so the block inherits it (and trims the source).
25841
- /* @__PURE__ */ jsx73(
26263
+ /* @__PURE__ */ jsx74(
25842
26264
  ScrollContainer,
25843
26265
  {
25844
26266
  as: "section",
@@ -25848,7 +26270,7 @@ function ExampleFrame({
25848
26270
  "data-theme": colorScheme,
25849
26271
  tabIndex: 0,
25850
26272
  "aria-label": labels.codeRegion,
25851
- children: /* @__PURE__ */ jsx73(CodeBlock, { variant: "ghost", code })
26273
+ children: /* @__PURE__ */ jsx74(CodeBlock, { variant: "ghost", code })
25852
26274
  }
25853
26275
  )
25854
26276
  ) })
@@ -25887,9 +26309,9 @@ function ExampleFrameToolbar({
25887
26309
  const copyLabel = copyState === "copied" ? labels.copied : copyState === "error" ? labels.copyError : labels.copy;
25888
26310
  const themeGlyph = colorScheme === "light" ? "theme.dark" : "theme.light";
25889
26311
  const copyGlyph = copyState === "copied" ? "action.check" : "action.copy";
25890
- return /* @__PURE__ */ jsxs56("div", { ref: toolbarRef, className: ExampleFrame_default.toolbar, "data-narrow": narrow || void 0, children: [
25891
- /* @__PURE__ */ jsxs56("div", { className: ExampleFrame_default.toolbarLine1, children: [
25892
- /* @__PURE__ */ jsxs56(
26312
+ return /* @__PURE__ */ jsxs57("div", { ref: toolbarRef, className: ExampleFrame_default.toolbar, "data-narrow": narrow || void 0, children: [
26313
+ /* @__PURE__ */ jsxs57("div", { className: ExampleFrame_default.toolbarLine1, children: [
26314
+ /* @__PURE__ */ jsxs57(
25893
26315
  SegmentedControl.Root,
25894
26316
  {
25895
26317
  className: ExampleFrame_default.toolbarPaneSegment,
@@ -25899,19 +26321,19 @@ function ExampleFrameToolbar({
25899
26321
  size: "s",
25900
26322
  "aria-label": labels.paneSwitch,
25901
26323
  children: [
25902
- /* @__PURE__ */ jsxs56(SegmentedControl.Item, { value: "preview", children: [
25903
- /* @__PURE__ */ jsx73(SegmentedControl.Icon, { children: /* @__PURE__ */ jsx73(Icon, { name: "view.preview" }) }),
26324
+ /* @__PURE__ */ jsxs57(SegmentedControl.Item, { value: "preview", children: [
26325
+ /* @__PURE__ */ jsx74(SegmentedControl.Icon, { children: /* @__PURE__ */ jsx74(Icon, { name: "view.preview" }) }),
25904
26326
  labels.preview
25905
26327
  ] }),
25906
- /* @__PURE__ */ jsxs56(SegmentedControl.Item, { value: "code", children: [
25907
- /* @__PURE__ */ jsx73(SegmentedControl.Icon, { children: /* @__PURE__ */ jsx73(Icon, { name: "view.code" }) }),
26328
+ /* @__PURE__ */ jsxs57(SegmentedControl.Item, { value: "code", children: [
26329
+ /* @__PURE__ */ jsx74(SegmentedControl.Icon, { children: /* @__PURE__ */ jsx74(Icon, { name: "view.code" }) }),
25908
26330
  labels.code
25909
26331
  ] })
25910
26332
  ]
25911
26333
  }
25912
26334
  ),
25913
- /* @__PURE__ */ jsxs56("div", { className: ExampleFrame_default.toolbarLine1End, children: [
25914
- onColorSchemeChange ? /* @__PURE__ */ jsx73(
26335
+ /* @__PURE__ */ jsxs57("div", { className: ExampleFrame_default.toolbarLine1End, children: [
26336
+ onColorSchemeChange ? /* @__PURE__ */ jsx74(
25915
26337
  Button.Root,
25916
26338
  {
25917
26339
  variant: "soft",
@@ -25920,10 +26342,10 @@ function ExampleFrameToolbar({
25920
26342
  size: "s",
25921
26343
  onClick: () => onColorSchemeChange(colorScheme === "light" ? "dark" : "light"),
25922
26344
  "aria-label": colorScheme === "light" ? labels.themeDark : labels.themeLight,
25923
- children: /* @__PURE__ */ jsx73(Button.Icon, { children: /* @__PURE__ */ jsx73(Icon, { name: themeGlyph, size: "s", tone: "secondary" }) })
26345
+ children: /* @__PURE__ */ jsx74(Button.Icon, { children: /* @__PURE__ */ jsx74(Icon, { name: themeGlyph, size: "s", tone: "secondary" }) })
25924
26346
  }
25925
26347
  ) : null,
25926
- /* @__PURE__ */ jsx73(
26348
+ /* @__PURE__ */ jsx74(
25927
26349
  Button.Root,
25928
26350
  {
25929
26351
  variant: "soft",
@@ -25932,12 +26354,12 @@ function ExampleFrameToolbar({
25932
26354
  size: "s",
25933
26355
  onClick: handleCopy,
25934
26356
  "aria-label": copyLabel,
25935
- children: /* @__PURE__ */ jsx73(Button.Icon, { "data-copy-state": copyState, children: /* @__PURE__ */ jsx73(Icon, { name: copyGlyph, size: "s", tone: "secondary" }) })
26357
+ children: /* @__PURE__ */ jsx74(Button.Icon, { "data-copy-state": copyState, children: /* @__PURE__ */ jsx74(Icon, { name: copyGlyph, size: "s", tone: "secondary" }) })
25936
26358
  }
25937
26359
  )
25938
26360
  ] })
25939
26361
  ] }),
25940
- pane === "preview" ? /* @__PURE__ */ jsx73(
26362
+ pane === "preview" ? /* @__PURE__ */ jsx74(
25941
26363
  SegmentedControl.Root,
25942
26364
  {
25943
26365
  className: ExampleFrame_default.toolbarViewportSegment,
@@ -25946,8 +26368,8 @@ function ExampleFrameToolbar({
25946
26368
  onValueChange: (v) => onViewportChange(v),
25947
26369
  size: "s",
25948
26370
  "aria-label": labels.viewportSwitch,
25949
- children: VIEWPORTS.map((option) => /* @__PURE__ */ jsxs56(SegmentedControl.Item, { value: option, children: [
25950
- /* @__PURE__ */ jsx73(SegmentedControl.Icon, { children: /* @__PURE__ */ jsx73(Icon, { name: `viewport.${option}` }) }),
26371
+ children: VIEWPORTS.map((option) => /* @__PURE__ */ jsxs57(SegmentedControl.Item, { value: option, children: [
26372
+ /* @__PURE__ */ jsx74(SegmentedControl.Icon, { children: /* @__PURE__ */ jsx74(Icon, { name: `viewport.${option}` }) }),
25951
26373
  labels[option]
25952
26374
  ] }, option))
25953
26375
  }
@@ -25985,7 +26407,7 @@ var FieldList_default = {
25985
26407
  };
25986
26408
 
25987
26409
  // src/components/field-list/FieldList.tsx
25988
- import { Fragment as Fragment37, jsx as jsx74, jsxs as jsxs57 } from "react/jsx-runtime";
26410
+ import { Fragment as Fragment39, jsx as jsx75, jsxs as jsxs58 } from "react/jsx-runtime";
25989
26411
  var FIELD_LIST_LABELS = {
25990
26412
  remove: "\u0423\u0434\u0430\u043B\u0438\u0442\u044C: {row}",
25991
26413
  reorder: "\u041F\u0435\u0440\u0435\u043C\u0435\u0441\u0442\u0438\u0442\u044C: {row}",
@@ -26038,7 +26460,7 @@ var flipRows2 = (list) => list.querySelectorAll(":scope > li[data-fl-row]:not([d
26038
26460
  var flipRowKey2 = (row) => row.dataset.flRow;
26039
26461
  var GRIP_TIER = "xs";
26040
26462
  function GripBox({ children }) {
26041
- return /* @__PURE__ */ jsx74("span", { className: cx(fieldTierClass, FieldList_default.grip), "data-size": GRIP_TIER, children });
26463
+ return /* @__PURE__ */ jsx75("span", { className: cx(fieldTierClass, FieldList_default.grip), "data-size": GRIP_TIER, children });
26042
26464
  }
26043
26465
  function placesOf(columns) {
26044
26466
  const main = columns.findIndex((column) => column.width !== "compact");
@@ -26280,8 +26702,8 @@ function FieldList({
26280
26702
  if (menu) {
26281
26703
  const canUp = canMove(index, -1);
26282
26704
  const canDown = canMove(index, 1);
26283
- action = /* @__PURE__ */ jsxs57(Dropdown.Root, { children: [
26284
- /* @__PURE__ */ jsx74(Dropdown.Trigger, { children: /* @__PURE__ */ jsx74(
26705
+ action = /* @__PURE__ */ jsxs58(Dropdown.Root, { children: [
26706
+ /* @__PURE__ */ jsx75(Dropdown.Trigger, { children: /* @__PURE__ */ jsx75(
26285
26707
  Button.Root,
26286
26708
  {
26287
26709
  variant: "ghost",
@@ -26296,32 +26718,32 @@ function FieldList({
26296
26718
  event.preventDefault();
26297
26719
  move(id, event.key === "ArrowUp" ? -1 : 1);
26298
26720
  },
26299
- children: /* @__PURE__ */ jsx74(Button.Icon, { children: /* @__PURE__ */ jsx74(Icon, { name: "action.more" }) })
26721
+ children: /* @__PURE__ */ jsx75(Button.Icon, { children: /* @__PURE__ */ jsx75(Icon, { name: "action.more" }) })
26300
26722
  }
26301
26723
  ) }),
26302
- /* @__PURE__ */ jsxs57(Dropdown.Content, { align: "end", children: [
26303
- reorderable ? /* @__PURE__ */ jsxs57(Fragment37, { children: [
26304
- /* @__PURE__ */ jsxs57(Dropdown.Item, { disabled: !canUp, onSelect: () => move(id, -1), children: [
26305
- /* @__PURE__ */ jsx74(Dropdown.ItemIcon, { children: /* @__PURE__ */ jsx74(Icon, { name: "nav.chevronUp" }) }),
26724
+ /* @__PURE__ */ jsxs58(Dropdown.Content, { align: "end", children: [
26725
+ reorderable ? /* @__PURE__ */ jsxs58(Fragment39, { children: [
26726
+ /* @__PURE__ */ jsxs58(Dropdown.Item, { disabled: !canUp, onSelect: () => move(id, -1), children: [
26727
+ /* @__PURE__ */ jsx75(Dropdown.ItemIcon, { children: /* @__PURE__ */ jsx75(Icon, { name: "nav.chevronUp" }) }),
26306
26728
  labels.moveUp,
26307
- /* @__PURE__ */ jsx74(Dropdown.ItemShortcut, { children: "Alt \u2191" })
26729
+ /* @__PURE__ */ jsx75(Dropdown.ItemShortcut, { children: "Alt \u2191" })
26308
26730
  ] }),
26309
- /* @__PURE__ */ jsxs57(Dropdown.Item, { disabled: !canDown, onSelect: () => move(id, 1), children: [
26310
- /* @__PURE__ */ jsx74(Dropdown.ItemIcon, { children: /* @__PURE__ */ jsx74(Icon, { name: "nav.chevronDown" }) }),
26731
+ /* @__PURE__ */ jsxs58(Dropdown.Item, { disabled: !canDown, onSelect: () => move(id, 1), children: [
26732
+ /* @__PURE__ */ jsx75(Dropdown.ItemIcon, { children: /* @__PURE__ */ jsx75(Icon, { name: "nav.chevronDown" }) }),
26311
26733
  labels.moveDown,
26312
- /* @__PURE__ */ jsx74(Dropdown.ItemShortcut, { children: "Alt \u2193" })
26734
+ /* @__PURE__ */ jsx75(Dropdown.ItemShortcut, { children: "Alt \u2193" })
26313
26735
  ] }),
26314
- /* @__PURE__ */ jsx74(Dropdown.Separator, {})
26736
+ /* @__PURE__ */ jsx75(Dropdown.Separator, {})
26315
26737
  ] }) : null,
26316
- /* @__PURE__ */ jsxs57(Dropdown.Item, { tone: "danger", disabled: removeOff, onSelect: () => remove(id), children: [
26317
- /* @__PURE__ */ jsx74(Dropdown.ItemIcon, { children: /* @__PURE__ */ jsx74(Icon, { name: "action.delete" }) }),
26738
+ /* @__PURE__ */ jsxs58(Dropdown.Item, { tone: "danger", disabled: removeOff, onSelect: () => remove(id), children: [
26739
+ /* @__PURE__ */ jsx75(Dropdown.ItemIcon, { children: /* @__PURE__ */ jsx75(Icon, { name: "action.delete" }) }),
26318
26740
  labels.removeItem,
26319
- reason ? /* @__PURE__ */ jsx74(Dropdown.ItemDescription, { children: reason }) : null
26741
+ reason ? /* @__PURE__ */ jsx75(Dropdown.ItemDescription, { children: reason }) : null
26320
26742
  ] })
26321
26743
  ] })
26322
26744
  ] });
26323
26745
  } else {
26324
- const removeButton = /* @__PURE__ */ jsx74(
26746
+ const removeButton = /* @__PURE__ */ jsx75(
26325
26747
  Button.Root,
26326
26748
  {
26327
26749
  variant: "ghost",
@@ -26330,22 +26752,22 @@ function FieldList({
26330
26752
  disabled: removeOff,
26331
26753
  onClick: () => remove(id),
26332
26754
  "data-fl-action": "",
26333
- children: /* @__PURE__ */ jsx74(Button.Icon, { children: /* @__PURE__ */ jsx74(Icon, { name: "action.close" }) })
26755
+ children: /* @__PURE__ */ jsx75(Button.Icon, { children: /* @__PURE__ */ jsx75(Icon, { name: "action.close" }) })
26334
26756
  }
26335
26757
  );
26336
- action = reason ? /* @__PURE__ */ jsxs57(Tooltip.Root, { children: [
26337
- /* @__PURE__ */ jsx74(Tooltip.Trigger, { children: removeButton }),
26338
- /* @__PURE__ */ jsx74(Tooltip.Content, { children: reason })
26758
+ action = reason ? /* @__PURE__ */ jsxs58(Tooltip.Root, { children: [
26759
+ /* @__PURE__ */ jsx75(Tooltip.Trigger, { children: removeButton }),
26760
+ /* @__PURE__ */ jsx75(Tooltip.Content, { children: reason })
26339
26761
  ] }) : removeButton;
26340
26762
  }
26341
- const content = /* @__PURE__ */ jsxs57(Fragment37, { children: [
26342
- /* @__PURE__ */ jsx74("div", { className: FieldList_default.cells, "data-fl-cells": "", children: cells.map((cell, column) => {
26763
+ const content = /* @__PURE__ */ jsxs58(Fragment39, { children: [
26764
+ /* @__PURE__ */ jsx75("div", { className: FieldList_default.cells, "data-fl-cells": "", children: cells.map((cell, column) => {
26343
26765
  const heading = columns[column];
26344
- return /* @__PURE__ */ jsx74(
26766
+ return /* @__PURE__ */ jsx75(
26345
26767
  FieldCellContext,
26346
26768
  {
26347
26769
  value: cellValue(heading?.label ?? "", single, Boolean(heading?.required)),
26348
- children: /* @__PURE__ */ jsx74(
26770
+ children: /* @__PURE__ */ jsx75(
26349
26771
  "div",
26350
26772
  {
26351
26773
  className: FieldList_default.cell,
@@ -26358,8 +26780,8 @@ function FieldList({
26358
26780
  column
26359
26781
  );
26360
26782
  }) }),
26361
- /* @__PURE__ */ jsx74("span", { className: FieldList_default.end, children: action }),
26362
- grip ? /* @__PURE__ */ jsx74(GripBox, { children: /* @__PURE__ */ jsx74(
26783
+ /* @__PURE__ */ jsx75("span", { className: FieldList_default.end, children: action }),
26784
+ grip ? /* @__PURE__ */ jsx75(GripBox, { children: /* @__PURE__ */ jsx75(
26363
26785
  Dnd.Handle,
26364
26786
  {
26365
26787
  "aria-label": formatLabel(labels.reorder, { row: name }),
@@ -26383,6 +26805,8 @@ function FieldList({
26383
26805
  fieldTierClass,
26384
26806
  FieldList_default.row,
26385
26807
  FieldList_default.record,
26808
+ // A list on its own fill draws lines between its rows; a plain one only once they stack
26809
+ // (its one-line rows are parted by air: FieldList.module.css).
26386
26810
  hairline_default.between,
26387
26811
  presence.entering.has(id) && enterMotion_default.enter
26388
26812
  ),
@@ -26392,9 +26816,9 @@ function FieldList({
26392
26816
  "data-locked": locked || void 0,
26393
26817
  "data-single": single || void 0
26394
26818
  };
26395
- return grip ? /* @__PURE__ */ jsx74(Dnd.SortableItem, { id, locked, ...rowProps, children: content }, id) : /* @__PURE__ */ jsx74("li", { ...rowProps, children: content }, id);
26819
+ return grip ? /* @__PURE__ */ jsx75(Dnd.SortableItem, { id, locked, ...rowProps, children: content }, id) : /* @__PURE__ */ jsx75("li", { ...rowProps, children: content }, id);
26396
26820
  };
26397
- const sheet = /* @__PURE__ */ jsxs57(
26821
+ const sheet = /* @__PURE__ */ jsxs58(
26398
26822
  "div",
26399
26823
  {
26400
26824
  className: FieldList_default.sheet,
@@ -26402,7 +26826,7 @@ function FieldList({
26402
26826
  "data-depth": surface ? depth : void 0,
26403
26827
  "data-empty": items.length === 0 || void 0,
26404
26828
  children: [
26405
- hasHead ? /* @__PURE__ */ jsxs57(
26829
+ hasHead ? /* @__PURE__ */ jsxs58(
26406
26830
  "div",
26407
26831
  {
26408
26832
  ref: head.ref,
@@ -26411,7 +26835,7 @@ function FieldList({
26411
26835
  "data-size": size,
26412
26836
  "aria-hidden": "true",
26413
26837
  children: [
26414
- /* @__PURE__ */ jsx74("div", { className: FieldList_default.cells, children: columns.map((column, index) => /* @__PURE__ */ jsx74(
26838
+ /* @__PURE__ */ jsx75("div", { className: FieldList_default.cells, children: columns.map((column, index) => /* @__PURE__ */ jsx75(
26415
26839
  Label.Root,
26416
26840
  {
26417
26841
  size,
@@ -26424,12 +26848,12 @@ function FieldList({
26424
26848
  },
26425
26849
  index
26426
26850
  )) }),
26427
- /* @__PURE__ */ jsx74("span", {}),
26428
- grip ? /* @__PURE__ */ jsx74(GripBox, {}) : null
26851
+ /* @__PURE__ */ jsx75("span", {}),
26852
+ grip ? /* @__PURE__ */ jsx75(GripBox, {}) : null
26429
26853
  ]
26430
26854
  }
26431
26855
  ) : null,
26432
- grip ? /* @__PURE__ */ jsx74(Dnd.Root, { children: /* @__PURE__ */ jsx74(
26856
+ grip ? /* @__PURE__ */ jsx75(Dnd.Root, { children: /* @__PURE__ */ jsx75(
26433
26857
  Dnd.Sortable,
26434
26858
  {
26435
26859
  role: "list",
@@ -26444,7 +26868,7 @@ function FieldList({
26444
26868
  onReorder: (id, beforeId) => setItems((current) => moveBefore(current, id, beforeId, getId)),
26445
26869
  renderItem: renderRow
26446
26870
  }
26447
- ) }) : /* @__PURE__ */ jsx74(
26871
+ ) }) : /* @__PURE__ */ jsx75(
26448
26872
  "ol",
26449
26873
  {
26450
26874
  ref: setListElement,
@@ -26456,7 +26880,7 @@ function FieldList({
26456
26880
  ),
26457
26881
  totalCells ? (
26458
26882
  // biome-ignore lint/a11y/useSemanticElements: a row of figures, not a form fieldset
26459
- /* @__PURE__ */ jsxs57(
26883
+ /* @__PURE__ */ jsxs58(
26460
26884
  "div",
26461
26885
  {
26462
26886
  ref: totals.ref,
@@ -26466,29 +26890,29 @@ function FieldList({
26466
26890
  style: trackStyle,
26467
26891
  "data-size": size,
26468
26892
  children: [
26469
- /* @__PURE__ */ jsx74("div", { className: FieldList_default.cells, children: totalCells.map((total, column) => {
26893
+ /* @__PURE__ */ jsx75("div", { className: FieldList_default.cells, children: totalCells.map((total, column) => {
26470
26894
  const heading = columns[column];
26471
26895
  const shown = hasContent(total);
26472
- return /* @__PURE__ */ jsx74(
26896
+ return /* @__PURE__ */ jsx75(
26473
26897
  "div",
26474
26898
  {
26475
26899
  className: cx(FieldList_default.cell, FieldList_default.total),
26476
26900
  "data-width": heading?.width ?? "fill",
26477
26901
  "data-empty": !shown && column > 0 || void 0,
26478
26902
  "data-align": endColumns[column] === "1" ? "end" : void 0,
26479
- children: shown ? /* @__PURE__ */ jsxs57(Fragment37, { children: [
26480
- /* @__PURE__ */ jsx74("span", { className: cx(visuallyHiddenClass, FieldList_default.totalName), children: heading?.label }),
26481
- /* @__PURE__ */ jsx74("span", { className: FieldList_default.totalValue, children: total })
26903
+ children: shown ? /* @__PURE__ */ jsxs58(Fragment39, { children: [
26904
+ /* @__PURE__ */ jsx75("span", { className: cx(visuallyHiddenClass, FieldList_default.totalName), children: heading?.label }),
26905
+ /* @__PURE__ */ jsx75("span", { className: FieldList_default.totalValue, children: total })
26482
26906
  ] }) : column === 0 ? (
26483
26907
  // The group's name says it to screen readers.
26484
- /* @__PURE__ */ jsx74("span", { className: FieldList_default.totalsLabel, "aria-hidden": "true", children: labels.totals })
26908
+ /* @__PURE__ */ jsx75("span", { className: FieldList_default.totalsLabel, "aria-hidden": "true", children: labels.totals })
26485
26909
  ) : null
26486
26910
  },
26487
26911
  column
26488
26912
  );
26489
26913
  }) }),
26490
- /* @__PURE__ */ jsx74("span", { className: cx(FieldList_default.end, FieldList_default.totalsEnd) }),
26491
- grip ? /* @__PURE__ */ jsx74(GripBox, {}) : null
26914
+ /* @__PURE__ */ jsx75("span", { className: cx(FieldList_default.end, FieldList_default.totalsEnd) }),
26915
+ grip ? /* @__PURE__ */ jsx75(GripBox, {}) : null
26492
26916
  ]
26493
26917
  }
26494
26918
  )
@@ -26497,7 +26921,7 @@ function FieldList({
26497
26921
  }
26498
26922
  );
26499
26923
  return tier.provide(
26500
- /* @__PURE__ */ jsx74(DisabledProvider, { disabled, children: /* @__PURE__ */ jsx74(
26924
+ /* @__PURE__ */ jsx75(DisabledProvider, { disabled, children: /* @__PURE__ */ jsx75(
26501
26925
  FieldFrame,
26502
26926
  {
26503
26927
  ...rest,
@@ -26513,10 +26937,10 @@ function FieldList({
26513
26937
  group: true,
26514
26938
  className: cx(FieldList_default.root, className),
26515
26939
  ...toDataAttributes({ disabled: disabled || void 0 }),
26516
- children: /* @__PURE__ */ jsxs57("div", { ref: bodyRef, className: FieldList_default.body, children: [
26517
- surface ? /* @__PURE__ */ jsx74(SurfaceDepthProvider, { value: depth, children: sheet }) : sheet,
26518
- createItem ? /* @__PURE__ */ jsxs57("div", { className: FieldList_default.add, children: [
26519
- /* @__PURE__ */ jsxs57(
26940
+ children: /* @__PURE__ */ jsxs58("div", { ref: bodyRef, className: FieldList_default.body, children: [
26941
+ surface ? /* @__PURE__ */ jsx75(SurfaceDepthProvider, { value: depth, children: sheet }) : sheet,
26942
+ createItem ? /* @__PURE__ */ jsxs58("div", { className: FieldList_default.add, children: [
26943
+ /* @__PURE__ */ jsxs58(
26520
26944
  Button.Root,
26521
26945
  {
26522
26946
  ref: addRef,
@@ -26525,14 +26949,14 @@ function FieldList({
26525
26949
  disabled: disabled || atMax,
26526
26950
  onClick: add,
26527
26951
  children: [
26528
- /* @__PURE__ */ jsx74(Button.Icon, { children: /* @__PURE__ */ jsx74(Icon, { name: "action.add" }) }),
26952
+ /* @__PURE__ */ jsx75(Button.Icon, { children: /* @__PURE__ */ jsx75(Icon, { name: "action.add" }) }),
26529
26953
  addLabel
26530
26954
  ]
26531
26955
  }
26532
26956
  ),
26533
- atMax && max !== void 0 ? /* @__PURE__ */ jsx74("span", { className: cx(textRole_default.caption, FieldList_default.limit), children: formatLabel(labels.maxReached, { max }) }) : null
26957
+ atMax && max !== void 0 ? /* @__PURE__ */ jsx75("span", { className: cx(textRole_default.caption, FieldList_default.limit), children: formatLabel(labels.maxReached, { max }) }) : null
26534
26958
  ] }) : null,
26535
- menu && reorderable ? /* @__PURE__ */ jsx74(VisuallyHidden, { live: "polite", children: announcement }) : null
26959
+ menu && reorderable ? /* @__PURE__ */ jsx75(VisuallyHidden, { live: "polite", children: announcement }) : null
26536
26960
  ] })
26537
26961
  }
26538
26962
  ) })
@@ -26563,7 +26987,7 @@ var Fieldset_default = {
26563
26987
  };
26564
26988
 
26565
26989
  // src/components/fieldset/Fieldset.tsx
26566
- import { jsx as jsx75, jsxs as jsxs58 } from "react/jsx-runtime";
26990
+ import { jsx as jsx76, jsxs as jsxs59 } from "react/jsx-runtime";
26567
26991
  function Fieldset({
26568
26992
  label,
26569
26993
  description,
@@ -26577,7 +27001,7 @@ function Fieldset({
26577
27001
  const descriptionId = React83.useId();
26578
27002
  const hasDescription = hasContent(description);
26579
27003
  const describedBy = [ariaDescribedBy, hasDescription ? descriptionId : void 0].filter(Boolean).join(" ") || void 0;
26580
- return /* @__PURE__ */ jsxs58(
27004
+ return /* @__PURE__ */ jsxs59(
26581
27005
  "fieldset",
26582
27006
  {
26583
27007
  ...rest,
@@ -26586,10 +27010,10 @@ function Fieldset({
26586
27010
  "aria-describedby": describedBy,
26587
27011
  ...toDataAttributes({ disabled: disabled || void 0 }),
26588
27012
  children: [
26589
- hasContent(label) ? /* @__PURE__ */ jsx75("legend", { className: cx(textRole_default.titleS, Fieldset_default.legend), children: label }) : null,
26590
- /* @__PURE__ */ jsxs58("div", { className: Fieldset_default.body, children: [
26591
- hasDescription ? /* @__PURE__ */ jsx75("p", { id: descriptionId, className: cx(textRole_default.bodyS, Fieldset_default.description), children: description }) : null,
26592
- /* @__PURE__ */ jsx75("div", { className: Fieldset_default.fields, children: /* @__PURE__ */ jsx75(DisabledProvider, { disabled, children }) })
27013
+ hasContent(label) ? /* @__PURE__ */ jsx76("legend", { className: cx(textRole_default.titleS, Fieldset_default.legend), children: label }) : null,
27014
+ /* @__PURE__ */ jsxs59("div", { className: Fieldset_default.body, children: [
27015
+ hasDescription ? /* @__PURE__ */ jsx76("p", { id: descriptionId, className: cx(textRole_default.bodyS, Fieldset_default.description), children: description }) : null,
27016
+ /* @__PURE__ */ jsx76("div", { className: Fieldset_default.fields, children: /* @__PURE__ */ jsx76(DisabledProvider, { disabled, children }) })
26593
27017
  ] })
26594
27018
  ]
26595
27019
  }
@@ -26882,7 +27306,7 @@ function visibleSegment(rect, viewport2) {
26882
27306
  }
26883
27307
 
26884
27308
  // src/components/gantt/GanttBar.tsx
26885
- import { Fragment as Fragment38, jsx as jsx76, jsxs as jsxs59 } from "react/jsx-runtime";
27309
+ import { Fragment as Fragment40, jsx as jsx77, jsxs as jsxs60 } from "react/jsx-runtime";
26886
27310
  var EDIT_SHORTCUTS = [
26887
27311
  "Shift+ArrowLeft",
26888
27312
  "Shift+ArrowRight",
@@ -27048,8 +27472,8 @@ function GanttBarView({
27048
27472
  },
27049
27473
  [barRef]
27050
27474
  );
27051
- return /* @__PURE__ */ jsxs59(Fragment38, { children: [
27052
- guide !== null ? /* @__PURE__ */ jsx76(
27475
+ return /* @__PURE__ */ jsxs60(Fragment40, { children: [
27476
+ guide !== null ? /* @__PURE__ */ jsx77(
27053
27477
  "span",
27054
27478
  {
27055
27479
  className: Gantt_default.dayGuide,
@@ -27057,13 +27481,13 @@ function GanttBarView({
27057
27481
  "aria-hidden": "true"
27058
27482
  }
27059
27483
  ) : null,
27060
- /* @__PURE__ */ jsxs59(
27484
+ /* @__PURE__ */ jsxs60(
27061
27485
  Tooltip.Root,
27062
27486
  {
27063
27487
  open: tipOpen || drag !== null,
27064
27488
  onOpenChange: (open) => setTipOpen(open && canShowTip(bar.id)),
27065
27489
  children: [
27066
- /* @__PURE__ */ jsx76(Tooltip.Trigger, { children: /* @__PURE__ */ jsxs59(
27490
+ /* @__PURE__ */ jsx77(Tooltip.Trigger, { children: /* @__PURE__ */ jsxs60(
27067
27491
  "button",
27068
27492
  {
27069
27493
  ref: setNode,
@@ -27120,24 +27544,24 @@ function GanttBarView({
27120
27544
  onActivate();
27121
27545
  },
27122
27546
  children: [
27123
- milestone ? /* @__PURE__ */ jsx76("span", { className: Gantt_default.diamond, "aria-hidden": "true" }) : null,
27124
- pending ? /* @__PURE__ */ jsx76(Spinner, { size: "xs", className: Gantt_default.spinner, "aria-hidden": "true" }) : null,
27125
- /* @__PURE__ */ jsx76("span", { className: Gantt_default.label, "data-gantt-label": "", "aria-hidden": "true", children: bar.label }),
27126
- editable && !milestone ? /* @__PURE__ */ jsxs59(Fragment38, { children: [
27127
- /* @__PURE__ */ jsx76("span", { className: Gantt_default.handle, "data-handle": "start", "aria-hidden": "true" }),
27128
- /* @__PURE__ */ jsx76("span", { className: Gantt_default.handle, "data-handle": "end", "aria-hidden": "true" })
27547
+ milestone ? /* @__PURE__ */ jsx77("span", { className: Gantt_default.diamond, "aria-hidden": "true" }) : null,
27548
+ pending ? /* @__PURE__ */ jsx77(Spinner, { size: "xs", className: Gantt_default.spinner, "aria-hidden": "true" }) : null,
27549
+ /* @__PURE__ */ jsx77("span", { className: Gantt_default.label, "data-gantt-label": "", "aria-hidden": "true", children: bar.label }),
27550
+ editable && !milestone ? /* @__PURE__ */ jsxs60(Fragment40, { children: [
27551
+ /* @__PURE__ */ jsx77("span", { className: Gantt_default.handle, "data-handle": "start", "aria-hidden": "true" }),
27552
+ /* @__PURE__ */ jsx77("span", { className: Gantt_default.handle, "data-handle": "end", "aria-hidden": "true" })
27129
27553
  ] }) : null
27130
27554
  ]
27131
27555
  }
27132
27556
  ) }),
27133
- tipMounted ? /* @__PURE__ */ jsxs59(Tooltip.Content, { children: [
27134
- /* @__PURE__ */ jsx76("span", { className: Gantt_default.tipTitle, children: bar.label }),
27135
- /* @__PURE__ */ jsxs59("span", { className: Gantt_default.tipMeta, children: [
27557
+ tipMounted ? /* @__PURE__ */ jsxs60(Tooltip.Content, { children: [
27558
+ /* @__PURE__ */ jsx77("span", { className: Gantt_default.tipTitle, children: bar.label }),
27559
+ /* @__PURE__ */ jsxs60("span", { className: Gantt_default.tipMeta, children: [
27136
27560
  formatSpan(shown, locale),
27137
27561
  milestone ? null : ` \xB7 ${formatDuration(daysBetween2(shown.start, shown.end))}`,
27138
27562
  progress === void 0 ? null : ` \xB7 ${progress}%`
27139
27563
  ] }),
27140
- renderTip ? /* @__PURE__ */ jsx76("div", { className: Gantt_default.tipExtra, children: renderTip() }) : null
27564
+ renderTip ? /* @__PURE__ */ jsx77("div", { className: Gantt_default.tipExtra, children: renderTip() }) : null
27141
27565
  ] }) : null
27142
27566
  ]
27143
27567
  }
@@ -27146,7 +27570,7 @@ function GanttBarView({
27146
27570
  }
27147
27571
 
27148
27572
  // src/components/gantt/GanttRow.tsx
27149
- import { Fragment as Fragment39, jsx as jsx77, jsxs as jsxs60 } from "react/jsx-runtime";
27573
+ import { Fragment as Fragment41, jsx as jsx78, jsxs as jsxs61 } from "react/jsx-runtime";
27150
27574
  function GanttRowView({
27151
27575
  ctx,
27152
27576
  index,
@@ -27184,9 +27608,9 @@ function GanttRowView({
27184
27608
  const start = new Date(rangeStart);
27185
27609
  const windowed = windowFrom <= windowTo;
27186
27610
  const on = (event) => (native) => ctx.track(event, index, native);
27187
- const content = /* @__PURE__ */ jsxs60(Fragment39, { children: [
27188
- renderRowAvatar ? /* @__PURE__ */ jsx77("span", { className: Gantt_default.rowAvatar, children: renderRowAvatar(row) }) : null,
27189
- /* @__PURE__ */ jsx77("span", { className: Gantt_default.rowLabel, children: renderRow ? renderRow(row) : label })
27611
+ const content = /* @__PURE__ */ jsxs61(Fragment41, { children: [
27612
+ renderRowAvatar ? /* @__PURE__ */ jsx78("span", { className: Gantt_default.rowAvatar, children: renderRowAvatar(row) }) : null,
27613
+ /* @__PURE__ */ jsx78("span", { className: Gantt_default.rowLabel, children: renderRow ? renderRow(row) : label })
27190
27614
  ] });
27191
27615
  const stopProps = {
27192
27616
  // With an avatar a narrow chart shows only the picture: the row label names the stop.
@@ -27195,7 +27619,7 @@ function GanttRowView({
27195
27619
  "aria-keyshortcuts": creatable ? "N" : void 0,
27196
27620
  onFocus: () => ctx.focus(navId)
27197
27621
  };
27198
- return /* @__PURE__ */ jsxs60(
27622
+ return /* @__PURE__ */ jsxs61(
27199
27623
  "div",
27200
27624
  {
27201
27625
  ref: measureRef,
@@ -27204,7 +27628,7 @@ function GanttRowView({
27204
27628
  className: Gantt_default.row,
27205
27629
  style: { "--lanes": laneCount, "--row-top": `${top}px` },
27206
27630
  children: [
27207
- href === void 0 ? /* @__PURE__ */ jsx77(
27631
+ href === void 0 ? /* @__PURE__ */ jsx78(
27208
27632
  "div",
27209
27633
  {
27210
27634
  ref: ctx.register(navId),
@@ -27225,7 +27649,7 @@ function GanttRowView({
27225
27649
  } : void 0,
27226
27650
  children: content
27227
27651
  }
27228
- ) : /* @__PURE__ */ jsx77("div", { role: "rowheader", className: Gantt_default.rowHeader, "data-clickable": "", children: /* @__PURE__ */ jsx77(
27652
+ ) : /* @__PURE__ */ jsx78("div", { role: "rowheader", className: Gantt_default.rowHeader, "data-clickable": "", children: /* @__PURE__ */ jsx78(
27229
27653
  "a",
27230
27654
  {
27231
27655
  ref: ctx.register(navId),
@@ -27245,7 +27669,7 @@ function GanttRowView({
27245
27669
  children: content
27246
27670
  }
27247
27671
  ) }),
27248
- /* @__PURE__ */ jsxs60(
27672
+ /* @__PURE__ */ jsxs61(
27249
27673
  "div",
27250
27674
  {
27251
27675
  role: "gridcell",
@@ -27261,13 +27685,13 @@ function GanttRowView({
27261
27685
  onContextMenu: creatable ? on("contextMenu") : void 0,
27262
27686
  onDoubleClick: creatable ? on("doubleClick") : void 0,
27263
27687
  children: [
27264
- hover && !ghost ? /* @__PURE__ */ jsx77(
27688
+ hover && !ghost ? /* @__PURE__ */ jsx78(
27265
27689
  "span",
27266
27690
  {
27267
27691
  className: cx(Gantt_default.createCell, enterMotion_default.enterFade),
27268
27692
  style: { "--x": hover.x, "--span": hover.span },
27269
27693
  "aria-hidden": "true",
27270
- children: /* @__PURE__ */ jsx77(Icon, { name: "action.add", animated: false })
27694
+ children: /* @__PURE__ */ jsx78(Icon, { name: "action.add", animated: false })
27271
27695
  }
27272
27696
  ) : null,
27273
27697
  bars.map((bar) => {
@@ -27276,7 +27700,7 @@ function GanttRowView({
27276
27700
  const span = Math.max(daysBetween2(dates.start, dates.end), 1);
27277
27701
  const pinned = pending.has(bar.id) || dragging.has(bar.id) || tabStop === bar.id;
27278
27702
  if (windowed && !pinned && (x + span < windowFrom || x > windowTo)) return null;
27279
- return /* @__PURE__ */ jsx77(
27703
+ return /* @__PURE__ */ jsx78(
27280
27704
  GanttBarView,
27281
27705
  {
27282
27706
  bar,
@@ -27307,8 +27731,8 @@ function GanttRowView({
27307
27731
  bar.id
27308
27732
  );
27309
27733
  }),
27310
- ghost ? /* @__PURE__ */ jsxs60(Tooltip.Root, { open: ghost.status === "drawing", children: [
27311
- /* @__PURE__ */ jsx77(Tooltip.Trigger, { children: /* @__PURE__ */ jsxs60(
27734
+ ghost ? /* @__PURE__ */ jsxs61(Tooltip.Root, { open: ghost.status === "drawing", children: [
27735
+ /* @__PURE__ */ jsx78(Tooltip.Trigger, { children: /* @__PURE__ */ jsxs61(
27312
27736
  "span",
27313
27737
  {
27314
27738
  tabIndex: -1,
@@ -27321,14 +27745,14 @@ function GanttRowView({
27321
27745
  "--lane": ghostLane
27322
27746
  },
27323
27747
  children: [
27324
- ghost.status === "pending" ? /* @__PURE__ */ jsx77(Skeleton, { shape: "block", className: Gantt_default.ghostBusy }) : null,
27325
- /* @__PURE__ */ jsx77("span", { className: Gantt_default.ghostLabel, children: newBarLabel })
27748
+ ghost.status === "pending" ? /* @__PURE__ */ jsx78(Skeleton, { shape: "block", className: Gantt_default.ghostBusy }) : null,
27749
+ /* @__PURE__ */ jsx78("span", { className: Gantt_default.ghostLabel, children: newBarLabel })
27326
27750
  ]
27327
27751
  }
27328
27752
  ) }),
27329
- /* @__PURE__ */ jsxs60(Tooltip.Content, { children: [
27330
- /* @__PURE__ */ jsx77("span", { className: Gantt_default.tipTitle, children: newBarLabel }),
27331
- /* @__PURE__ */ jsxs60("span", { className: Gantt_default.tipMeta, children: [
27753
+ /* @__PURE__ */ jsxs61(Tooltip.Content, { children: [
27754
+ /* @__PURE__ */ jsx78("span", { className: Gantt_default.tipTitle, children: newBarLabel }),
27755
+ /* @__PURE__ */ jsxs61("span", { className: Gantt_default.tipMeta, children: [
27332
27756
  formatSpan(ghost.dates, locale),
27333
27757
  " \xB7",
27334
27758
  " ",
@@ -27346,7 +27770,7 @@ function GanttRowView({
27346
27770
  var GanttRow = React85.memo(GanttRowView);
27347
27771
 
27348
27772
  // src/components/gantt/Gantt.tsx
27349
- import { Fragment as Fragment40, jsx as jsx78, jsxs as jsxs61 } from "react/jsx-runtime";
27773
+ import { Fragment as Fragment42, jsx as jsx79, jsxs as jsxs62 } from "react/jsx-runtime";
27350
27774
  var GANTT_LABELS = {
27351
27775
  rowsHeader: "\u041D\u0430\u0437\u0432\u0430\u043D\u0438\u0435",
27352
27776
  timeline: "\u0428\u043A\u0430\u043B\u0430 \u0432\u0440\u0435\u043C\u0435\u043D\u0438",
@@ -28194,10 +28618,10 @@ function Gantt({
28194
28618
  const lineCells = tiers.bottom.filter(
28195
28619
  (cell) => (scale === "month" || cell.boundary) && inWindow(cell.x, 0)
28196
28620
  );
28197
- const backdrop = /* @__PURE__ */ jsxs61(Fragment40, { children: [
28198
- /* @__PURE__ */ jsx78("div", { className: Gantt_default.backdropWash, "aria-hidden": "true" }),
28199
- /* @__PURE__ */ jsxs61("div", { className: Gantt_default.backdropLines, "aria-hidden": "true", children: [
28200
- lineCells.map((cell) => /* @__PURE__ */ jsx78(
28621
+ const backdrop = /* @__PURE__ */ jsxs62(Fragment42, { children: [
28622
+ /* @__PURE__ */ jsx79("div", { className: Gantt_default.backdropWash, "aria-hidden": "true" }),
28623
+ /* @__PURE__ */ jsxs62("div", { className: Gantt_default.backdropLines, "aria-hidden": "true", children: [
28624
+ lineCells.map((cell) => /* @__PURE__ */ jsx79(
28201
28625
  "span",
28202
28626
  {
28203
28627
  className: Gantt_default.gridLine,
@@ -28206,7 +28630,7 @@ function Gantt({
28206
28630
  },
28207
28631
  `line-${cell.key}`
28208
28632
  )),
28209
- todayInRange ? /* @__PURE__ */ jsx78(
28633
+ todayInRange ? /* @__PURE__ */ jsx79(
28210
28634
  "span",
28211
28635
  {
28212
28636
  className: Gantt_default.todayLine,
@@ -28318,12 +28742,12 @@ function Gantt({
28318
28742
  const origin = todayInRange ? todayX : 0;
28319
28743
  body = SKELETON_ROWS3.map((bars, index) => (
28320
28744
  // biome-ignore lint/suspicious/noArrayIndexKey: static placeholder rows
28321
- /* @__PURE__ */ jsxs61("div", { className: Gantt_default.row, style: { "--lanes": 1 }, children: [
28322
- /* @__PURE__ */ jsxs61("div", { className: Gantt_default.rowHeader, children: [
28323
- hasAvatar ? /* @__PURE__ */ jsx78("span", { className: Gantt_default.rowAvatar, children: /* @__PURE__ */ jsx78(Skeleton, { shape: "circle" }) }) : null,
28324
- /* @__PURE__ */ jsx78("span", { className: Gantt_default.rowLabel, children: /* @__PURE__ */ jsx78(Skeleton, { className: Gantt_default.skeletonLabel }) })
28745
+ /* @__PURE__ */ jsxs62("div", { className: Gantt_default.row, style: { "--lanes": 1 }, children: [
28746
+ /* @__PURE__ */ jsxs62("div", { className: Gantt_default.rowHeader, children: [
28747
+ hasAvatar ? /* @__PURE__ */ jsx79("span", { className: Gantt_default.rowAvatar, children: /* @__PURE__ */ jsx79(Skeleton, { shape: "circle" }) }) : null,
28748
+ /* @__PURE__ */ jsx79("span", { className: Gantt_default.rowLabel, children: /* @__PURE__ */ jsx79(Skeleton, { className: Gantt_default.skeletonLabel }) })
28325
28749
  ] }),
28326
- /* @__PURE__ */ jsx78("div", { className: Gantt_default.track, children: bars.map(([offset, length]) => /* @__PURE__ */ jsx78(
28750
+ /* @__PURE__ */ jsx79("div", { className: Gantt_default.track, children: bars.map(([offset, length]) => /* @__PURE__ */ jsx79(
28327
28751
  Skeleton,
28328
28752
  {
28329
28753
  shape: "block",
@@ -28338,13 +28762,13 @@ function Gantt({
28338
28762
  ] }, index)
28339
28763
  ));
28340
28764
  } else if (bodyState === "empty") {
28341
- body = /* @__PURE__ */ jsx78("div", { role: "row", className: Gantt_default.emptyRow, children: /* @__PURE__ */ jsx78("div", { role: "gridcell", "aria-colspan": 2, className: Gantt_default.emptyCell, children: empty == null || typeof empty === "string" ? /* @__PURE__ */ jsx78(EmptyPage.Root, { layout: "compact", size, role: "status", children: /* @__PURE__ */ jsx78(EmptyPage.Description, { children: empty ?? labels.empty }) }) : empty }) });
28765
+ body = /* @__PURE__ */ jsx79("div", { role: "row", className: Gantt_default.emptyRow, children: /* @__PURE__ */ jsx79("div", { role: "gridcell", "aria-colspan": 2, className: Gantt_default.emptyCell, children: empty == null || typeof empty === "string" ? /* @__PURE__ */ jsx79(EmptyPage.Root, { layout: "compact", size, role: "status", children: /* @__PURE__ */ jsx79(EmptyPage.Description, { children: empty ?? labels.empty }) }) : empty }) });
28342
28766
  } else {
28343
28767
  body = virtual.rows.map(({ index, start }) => {
28344
28768
  const item = model[index];
28345
28769
  const { lanes, count, ghostLane } = lanesOf(item);
28346
28770
  const hover = hoverCell?.row === item.key ? hoverCell : null;
28347
- return /* @__PURE__ */ jsx78(
28771
+ return /* @__PURE__ */ jsx79(
28348
28772
  GanttRow,
28349
28773
  {
28350
28774
  ctx: rowContext,
@@ -28386,8 +28810,8 @@ function Gantt({
28386
28810
  }
28387
28811
  const topCells = tiers.top.filter((cell) => inWindow(cell.x, cell.span));
28388
28812
  const bottomCells = tiers.bottom.filter((cell) => inWindow(cell.x, cell.span));
28389
- return /* @__PURE__ */ jsx78(SurfaceDepthProvider, { value: depth, children: tier.provide(
28390
- /* @__PURE__ */ jsxs61(
28813
+ return /* @__PURE__ */ jsx79(SurfaceDepthProvider, { value: depth, children: tier.provide(
28814
+ /* @__PURE__ */ jsxs62(
28391
28815
  "div",
28392
28816
  {
28393
28817
  ...rest,
@@ -28406,7 +28830,7 @@ function Gantt({
28406
28830
  "scroll-height": fillHeight ? "fill" : void 0
28407
28831
  }),
28408
28832
  children: [
28409
- /* @__PURE__ */ jsx78(
28833
+ /* @__PURE__ */ jsx79(
28410
28834
  GanttToolbar,
28411
28835
  {
28412
28836
  toolbar,
@@ -28417,7 +28841,7 @@ function Gantt({
28417
28841
  onScale: toolbarActions.scale
28418
28842
  }
28419
28843
  ),
28420
- /* @__PURE__ */ jsx78("div", { className: Gantt_default.frame, children: /* @__PURE__ */ jsx78(
28844
+ /* @__PURE__ */ jsx79("div", { className: Gantt_default.frame, children: /* @__PURE__ */ jsx79(
28421
28845
  ScrollContainer,
28422
28846
  {
28423
28847
  ref: scrollRef,
@@ -28435,7 +28859,7 @@ function Gantt({
28435
28859
  },
28436
28860
  onWheel: () => closeTips(false),
28437
28861
  onTouchMove: () => closeTips(false),
28438
- children: /* @__PURE__ */ jsx78(AnchorRectProvider, { value: anchorToVisible, children: /* @__PURE__ */ jsx78(FloatingBoundaryProvider, { value: timelineBoundary, children: /* @__PURE__ */ jsx78(Tooltip.Provider, { children: /* @__PURE__ */ jsxs61(
28862
+ children: /* @__PURE__ */ jsx79(AnchorRectProvider, { value: anchorToVisible, children: /* @__PURE__ */ jsx79(FloatingBoundaryProvider, { value: timelineBoundary, children: /* @__PURE__ */ jsx79(Tooltip.Provider, { children: /* @__PURE__ */ jsxs62(
28439
28863
  "div",
28440
28864
  {
28441
28865
  role: "grid",
@@ -28447,7 +28871,7 @@ function Gantt({
28447
28871
  style: gridStyle,
28448
28872
  onKeyDown: onGridKeyDown,
28449
28873
  children: [
28450
- /* @__PURE__ */ jsxs61(
28874
+ /* @__PURE__ */ jsxs62(
28451
28875
  "div",
28452
28876
  {
28453
28877
  ref: headRef,
@@ -28455,17 +28879,17 @@ function Gantt({
28455
28879
  "aria-rowindex": 1,
28456
28880
  className: cx(Gantt_default.head, stickySurfaceClass),
28457
28881
  children: [
28458
- /* @__PURE__ */ jsx78(
28882
+ /* @__PURE__ */ jsx79(
28459
28883
  "div",
28460
28884
  {
28461
28885
  ref: cornerRef,
28462
28886
  role: "columnheader",
28463
28887
  "aria-label": hasAvatar ? labels.rowsHeader : void 0,
28464
28888
  className: Gantt_default.corner,
28465
- children: /* @__PURE__ */ jsx78("span", { className: Gantt_default.cornerText, children: labels.rowsHeader })
28889
+ children: /* @__PURE__ */ jsx79("span", { className: Gantt_default.cornerText, children: labels.rowsHeader })
28466
28890
  }
28467
28891
  ),
28468
- /* @__PURE__ */ jsxs61(
28892
+ /* @__PURE__ */ jsxs62(
28469
28893
  "div",
28470
28894
  {
28471
28895
  ref: axisRef,
@@ -28473,16 +28897,16 @@ function Gantt({
28473
28897
  "aria-label": labels.timeline,
28474
28898
  className: Gantt_default.axis,
28475
28899
  children: [
28476
- /* @__PURE__ */ jsx78("div", { className: Gantt_default.tier, "aria-hidden": "true", children: topCells.map((cell) => /* @__PURE__ */ jsx78(
28900
+ /* @__PURE__ */ jsx79("div", { className: Gantt_default.tier, "aria-hidden": "true", children: topCells.map((cell) => /* @__PURE__ */ jsx79(
28477
28901
  "span",
28478
28902
  {
28479
28903
  className: Gantt_default.tierCell,
28480
28904
  style: { "--x": cell.x, "--span": cell.span },
28481
- children: /* @__PURE__ */ jsx78("span", { className: Gantt_default.tierText, children: cell.text })
28905
+ children: /* @__PURE__ */ jsx79("span", { className: Gantt_default.tierText, children: cell.text })
28482
28906
  },
28483
28907
  cell.key
28484
28908
  )) }),
28485
- /* @__PURE__ */ jsx78("div", { className: Gantt_default.tier, "data-tier": "bottom", "aria-hidden": "true", children: bottomCells.map((cell) => /* @__PURE__ */ jsx78(
28909
+ /* @__PURE__ */ jsx79("div", { className: Gantt_default.tier, "data-tier": "bottom", "aria-hidden": "true", children: bottomCells.map((cell) => /* @__PURE__ */ jsx79(
28486
28910
  "span",
28487
28911
  {
28488
28912
  className: Gantt_default.tierCell,
@@ -28492,17 +28916,17 @@ function Gantt({
28492
28916
  today: cell.today,
28493
28917
  boundary: cell.boundary
28494
28918
  }),
28495
- children: /* @__PURE__ */ jsx78("span", { className: Gantt_default.tierText, children: cell.text })
28919
+ children: /* @__PURE__ */ jsx79("span", { className: Gantt_default.tierText, children: cell.text })
28496
28920
  },
28497
28921
  cell.key
28498
28922
  )) }),
28499
- todayInRange ? /* @__PURE__ */ jsx78(
28923
+ todayInRange ? /* @__PURE__ */ jsx79(
28500
28924
  "span",
28501
28925
  {
28502
28926
  className: Gantt_default.todayMark,
28503
28927
  style: { "--x": todayX + 0.5 },
28504
28928
  "aria-hidden": "true",
28505
- children: /* @__PURE__ */ jsx78("span", { className: Gantt_default.todayChip, children: labels.today })
28929
+ children: /* @__PURE__ */ jsx79("span", { className: Gantt_default.todayChip, children: labels.today })
28506
28930
  }
28507
28931
  ) : null
28508
28932
  ]
@@ -28511,7 +28935,7 @@ function Gantt({
28511
28935
  ]
28512
28936
  }
28513
28937
  ),
28514
- /* @__PURE__ */ jsx78(RegionSwap, { state: bodyState, children: /* @__PURE__ */ jsxs61(
28938
+ /* @__PURE__ */ jsx79(RegionSwap, { state: bodyState, children: /* @__PURE__ */ jsxs62(
28515
28939
  "div",
28516
28940
  {
28517
28941
  role: "rowgroup",
@@ -28533,10 +28957,10 @@ function Gantt({
28533
28957
  ) }) }) })
28534
28958
  }
28535
28959
  ) }),
28536
- editableAtAll ? /* @__PURE__ */ jsx78(VisuallyHidden, { id: hintId, children: labels.editHint }) : null,
28537
- creatable ? /* @__PURE__ */ jsx78(VisuallyHidden, { id: createHintId, children: labels.createHint }) : null,
28538
- bodyState === "loading" ? /* @__PURE__ */ jsx78(VisuallyHidden, { live: "polite", children: labels.loading }) : null,
28539
- /* @__PURE__ */ jsx78(VisuallyHidden, { live: "polite", children: announcement })
28960
+ editableAtAll ? /* @__PURE__ */ jsx79(VisuallyHidden, { id: hintId, children: labels.editHint }) : null,
28961
+ creatable ? /* @__PURE__ */ jsx79(VisuallyHidden, { id: createHintId, children: labels.createHint }) : null,
28962
+ bodyState === "loading" ? /* @__PURE__ */ jsx79(VisuallyHidden, { live: "polite", children: labels.loading }) : null,
28963
+ /* @__PURE__ */ jsx79(VisuallyHidden, { live: "polite", children: announcement })
28540
28964
  ]
28541
28965
  }
28542
28966
  )
@@ -28550,10 +28974,10 @@ var GanttToolbar = React86.memo(function GanttToolbar2({
28550
28974
  onToday,
28551
28975
  onScale
28552
28976
  }) {
28553
- return /* @__PURE__ */ jsxs61(ToolRow, { className: Gantt_default.toolbar, children: [
28554
- toolbar != null && toolbar !== false ? /* @__PURE__ */ jsx78(ToolGroup, { children: toolbar }) : null,
28555
- /* @__PURE__ */ jsx78(Button.Root, { variant: "ghost", tone: "neutral", disabled: !todayInRange, onClick: onToday, children: labels.today }),
28556
- /* @__PURE__ */ jsx78(SegmentedControl.Root, { "aria-label": labels.scale, value: scale, onValueChange: onScale, children: SCALES.map((value) => /* @__PURE__ */ jsx78(SegmentedControl.Item, { value, children: labels[value] }, value)) })
28977
+ return /* @__PURE__ */ jsxs62(ToolRow, { className: Gantt_default.toolbar, children: [
28978
+ toolbar != null && toolbar !== false ? /* @__PURE__ */ jsx79(ToolGroup, { children: toolbar }) : null,
28979
+ /* @__PURE__ */ jsx79(Button.Root, { variant: "ghost", tone: "neutral", disabled: !todayInRange, onClick: onToday, children: labels.today }),
28980
+ /* @__PURE__ */ jsx79(SegmentedControl.Root, { "aria-label": labels.scale, value: scale, onValueChange: onScale, children: SCALES.map((value) => /* @__PURE__ */ jsx79(SegmentedControl.Item, { value, children: labels[value] }, value)) })
28557
28981
  ] });
28558
28982
  });
28559
28983
 
@@ -28592,7 +29016,7 @@ var Kanban_default = {
28592
29016
  };
28593
29017
 
28594
29018
  // src/components/kanban/Kanban.tsx
28595
- import { Fragment as Fragment41, jsx as jsx79, jsxs as jsxs62 } from "react/jsx-runtime";
29019
+ import { Fragment as Fragment43, jsx as jsx80, jsxs as jsxs63 } from "react/jsx-runtime";
28596
29020
  var KANBAN_LABELS = {
28597
29021
  count: "\u041A\u0430\u0440\u0442\u043E\u0447\u0435\u043A: {count}",
28598
29022
  countLimit: "\u041A\u0430\u0440\u0442\u043E\u0447\u0435\u043A: {count} \u0438\u0437 {limit}",
@@ -28610,7 +29034,7 @@ var ItemIdContext = React87.createContext(null);
28610
29034
  var NARROW_REM = 40;
28611
29035
  var rootFontSize = () => typeof document === "undefined" ? 16 : Number.parseFloat(getComputedStyle(document.documentElement).fontSize) || 16;
28612
29036
  function KanbanRoot(props) {
28613
- return /* @__PURE__ */ jsx79(Dnd.Root, { children: /* @__PURE__ */ jsx79(KanbanBoard, { ...props }) });
29037
+ return /* @__PURE__ */ jsx80(Dnd.Root, { children: /* @__PURE__ */ jsx80(KanbanBoard, { ...props }) });
28614
29038
  }
28615
29039
  KanbanRoot.displayName = "Kanban.Root";
28616
29040
  var EMPTY_VALUE2 = {};
@@ -28786,7 +29210,7 @@ function KanbanBoard({
28786
29210
  }),
28787
29211
  [locked, links, opens, cardDepth]
28788
29212
  );
28789
- return /* @__PURE__ */ jsx79(BoardContext, { value: context, children: /* @__PURE__ */ jsx79(
29213
+ return /* @__PURE__ */ jsx80(BoardContext, { value: context, children: /* @__PURE__ */ jsx80(
28790
29214
  "div",
28791
29215
  {
28792
29216
  ref: rootRef,
@@ -28797,7 +29221,7 @@ function KanbanBoard({
28797
29221
  "data-variant": variant,
28798
29222
  "data-loading": loading || void 0,
28799
29223
  "data-disabled": disabled || void 0,
28800
- children: /* @__PURE__ */ jsx79(
29224
+ children: /* @__PURE__ */ jsx80(
28801
29225
  ScrollContainer,
28802
29226
  {
28803
29227
  axis: "horizontal",
@@ -28806,11 +29230,11 @@ function KanbanBoard({
28806
29230
  "data-full-width": "true",
28807
29231
  children: placeholders ? (
28808
29232
  // Before the columns arrive: placeholder columns in the column geometry.
28809
- /* @__PURE__ */ jsx79("div", { className: Kanban_default.placeholders, "aria-hidden": "true", children: Array.from({ length: loadingColumns }, (_, columnIndex) => (
29233
+ /* @__PURE__ */ jsx80("div", { className: Kanban_default.placeholders, "aria-hidden": "true", children: Array.from({ length: loadingColumns }, (_, columnIndex) => (
28810
29234
  // biome-ignore lint/suspicious/noArrayIndexKey: identical placeholder columns
28811
- /* @__PURE__ */ jsxs62("div", { className: Kanban_default.column, children: [
28812
- /* @__PURE__ */ jsx79("div", { className: cx(Kanban_default.header, hairline_default.bottom), children: /* @__PURE__ */ jsx79(Skeleton, { shape: "block", className: Kanban_default.skeletonTitle }) }),
28813
- /* @__PURE__ */ jsx79("div", { className: Kanban_default.body, children: /* @__PURE__ */ jsx79(
29235
+ /* @__PURE__ */ jsxs63("div", { className: Kanban_default.column, children: [
29236
+ /* @__PURE__ */ jsx80("div", { className: cx(Kanban_default.header, hairline_default.bottom), children: /* @__PURE__ */ jsx80(Skeleton, { shape: "block", className: Kanban_default.skeletonTitle }) }),
29237
+ /* @__PURE__ */ jsx80("div", { className: Kanban_default.body, children: /* @__PURE__ */ jsx80(
28814
29238
  SkeletonCards,
28815
29239
  {
28816
29240
  count: SKELETON_CARDS[columnIndex % SKELETON_CARDS.length] ?? 1,
@@ -28819,7 +29243,7 @@ function KanbanBoard({
28819
29243
  ) })
28820
29244
  ] }, columnIndex)
28821
29245
  )) })
28822
- ) : /* @__PURE__ */ jsx79(
29246
+ ) : /* @__PURE__ */ jsx80(
28823
29247
  Dnd.Sortable,
28824
29248
  {
28825
29249
  as: "ul",
@@ -28831,7 +29255,7 @@ function KanbanBoard({
28831
29255
  getLabel: (column) => formatLabel(labels.column, { column: column.title }),
28832
29256
  disabled: !reorderableColumns || locked,
28833
29257
  onReorder: (id, beforeId) => moveColumn(id, beforeId),
28834
- renderItem: (column, columnIndex) => /* @__PURE__ */ jsx79(
29258
+ renderItem: (column, columnIndex) => /* @__PURE__ */ jsx80(
28835
29259
  KanbanColumnView,
28836
29260
  {
28837
29261
  column,
@@ -28867,7 +29291,7 @@ function SkeletonCards({
28867
29291
  count,
28868
29292
  cardDepth
28869
29293
  }) {
28870
- return /* @__PURE__ */ jsx79("div", { className: Kanban_default.list, children: Array.from({ length: count }, (_, index) => /* @__PURE__ */ jsxs62(
29294
+ return /* @__PURE__ */ jsx80("div", { className: Kanban_default.list, children: Array.from({ length: count }, (_, index) => /* @__PURE__ */ jsxs63(
28871
29295
  "div",
28872
29296
  {
28873
29297
  className: cx(Kanban_default.item, Kanban_default.skeleton),
@@ -28875,10 +29299,10 @@ function SkeletonCards({
28875
29299
  "data-surface": cardDepth !== void 0 || void 0,
28876
29300
  "aria-hidden": "true",
28877
29301
  children: [
28878
- /* @__PURE__ */ jsx79(Skeleton, { lines: 2 }),
28879
- /* @__PURE__ */ jsxs62("div", { className: Kanban_default.footer, children: [
28880
- /* @__PURE__ */ jsx79(Skeleton, { shape: "block", className: Kanban_default.skeletonBadge }),
28881
- /* @__PURE__ */ jsx79(Skeleton, { shape: "circle", size: "s" })
29302
+ /* @__PURE__ */ jsx80(Skeleton, { lines: 2 }),
29303
+ /* @__PURE__ */ jsxs63("div", { className: Kanban_default.footer, children: [
29304
+ /* @__PURE__ */ jsx80(Skeleton, { shape: "block", className: Kanban_default.skeletonBadge }),
29305
+ /* @__PURE__ */ jsx80(Skeleton, { shape: "circle", size: "s" })
28882
29306
  ] })
28883
29307
  ]
28884
29308
  },
@@ -28915,7 +29339,7 @@ function KanbanColumnView({
28915
29339
  );
28916
29340
  const showMeta = metaLines.length > 0;
28917
29341
  const describedBy = [column.description ? descriptionId : null, showMeta ? metaId : null].filter(Boolean).join(" ") || void 0;
28918
- return /* @__PURE__ */ jsxs62(
29342
+ return /* @__PURE__ */ jsxs63(
28919
29343
  Dnd.SortableItem,
28920
29344
  {
28921
29345
  id: column.id,
@@ -28924,19 +29348,19 @@ function KanbanColumnView({
28924
29348
  "data-kanban-column": column.id,
28925
29349
  "data-full": full || void 0,
28926
29350
  children: [
28927
- /* @__PURE__ */ jsx79(ControlSizeProvider, { value: "s", children: /* @__PURE__ */ jsxs62(
29351
+ /* @__PURE__ */ jsx80(ControlSizeProvider, { value: "s", children: /* @__PURE__ */ jsxs63(
28928
29352
  "div",
28929
29353
  {
28930
29354
  className: cx(Kanban_default.header, hairline_default.bottom),
28931
29355
  "data-reorderable": reorderable || void 0,
28932
29356
  children: [
28933
- /* @__PURE__ */ jsx79(Title, { id: headingId, className: cx(textRole_default.titleM, Kanban_default.title), children: column.title }),
28934
- loading ? null : /* @__PURE__ */ jsxs62(Fragment41, { children: [
28935
- /* @__PURE__ */ jsx79(Badge.Root, { color: full ? "orange" : column.color ?? "gray", "aria-hidden": "true", children: column.limit === void 0 ? count : `${count} / ${column.limit}` }),
28936
- /* @__PURE__ */ jsx79(VisuallyHidden, { children: countText })
29357
+ /* @__PURE__ */ jsx80(Title, { id: headingId, className: cx(textRole_default.titleM, Kanban_default.title), children: column.title }),
29358
+ loading ? null : /* @__PURE__ */ jsxs63(Fragment43, { children: [
29359
+ /* @__PURE__ */ jsx80(Badge.Root, { color: full ? "orange" : column.color ?? "gray", "aria-hidden": "true", children: column.limit === void 0 ? count : `${count} / ${column.limit}` }),
29360
+ /* @__PURE__ */ jsx80(VisuallyHidden, { children: countText })
28937
29361
  ] }),
28938
- actions ? /* @__PURE__ */ jsx79("div", { className: cx(fieldTierClass, Kanban_default.actions), "data-size": "s", children: actions }) : null,
28939
- reorderable ? /* @__PURE__ */ jsx79(
29362
+ actions ? /* @__PURE__ */ jsx80("div", { className: cx(fieldTierClass, Kanban_default.actions), "data-size": "s", children: actions }) : null,
29363
+ reorderable ? /* @__PURE__ */ jsx80(
28940
29364
  Dnd.Handle,
28941
29365
  {
28942
29366
  className: Kanban_default.grip,
@@ -28944,15 +29368,15 @@ function KanbanColumnView({
28944
29368
  "aria-label": formatLabel(labels.moveColumn, { column: column.title })
28945
29369
  }
28946
29370
  ) : null,
28947
- column.description ? /* @__PURE__ */ jsx79("p", { id: descriptionId, className: cx(textRole_default.caption, Kanban_default.description), children: column.description }) : null,
28948
- showMeta ? /* @__PURE__ */ jsx79("div", { id: metaId, className: cx(textRole_default.caption, Kanban_default.meta), children: metaLines.map((line, index) => (
29371
+ column.description ? /* @__PURE__ */ jsx80("p", { id: descriptionId, className: cx(textRole_default.caption, Kanban_default.description), children: column.description }) : null,
29372
+ showMeta ? /* @__PURE__ */ jsx80("div", { id: metaId, className: cx(textRole_default.caption, Kanban_default.meta), children: metaLines.map((line, index) => (
28949
29373
  // biome-ignore lint/suspicious/noArrayIndexKey: a line is its place
28950
- /* @__PURE__ */ jsx79("span", { className: Kanban_default.metaLine, children: line }, index)
29374
+ /* @__PURE__ */ jsx80("span", { className: Kanban_default.metaLine, children: line }, index)
28951
29375
  )) }) : null
28952
29376
  ]
28953
29377
  }
28954
29378
  ) }),
28955
- /* @__PURE__ */ jsx79(ScrollContainer, { className: Kanban_default.body, children: /* @__PURE__ */ jsx79(Crossfade, { state: loading ? "loading" : "ready", className: Kanban_default.swap, children: loading ? /* @__PURE__ */ jsx79(SkeletonCards, { count: skeletons, cardDepth }) : /* @__PURE__ */ jsx79("div", { className: Kanban_default.drop, children: /* @__PURE__ */ jsx79(
29379
+ /* @__PURE__ */ jsx80(ScrollContainer, { className: Kanban_default.body, children: /* @__PURE__ */ jsx80(Crossfade, { state: loading ? "loading" : "ready", className: Kanban_default.swap, children: loading ? /* @__PURE__ */ jsx80(SkeletonCards, { count: skeletons, cardDepth }) : /* @__PURE__ */ jsx80("div", { className: Kanban_default.drop, children: /* @__PURE__ */ jsx80(
28956
29380
  Dnd.Sortable,
28957
29381
  {
28958
29382
  as: "ul",
@@ -28966,11 +29390,11 @@ function KanbanColumnView({
28966
29390
  canDrop: accepts,
28967
29391
  disabled,
28968
29392
  onReorder,
28969
- empty: /* @__PURE__ */ jsxs62(EmptyPage.Root, { layout: "compact", children: [
28970
- /* @__PURE__ */ jsx79(EmptyPage.Title, { as: "p", children: labels.empty }),
28971
- disabled ? null : /* @__PURE__ */ jsx79(EmptyPage.Description, { children: labels.emptyHint })
29393
+ empty: /* @__PURE__ */ jsxs63(EmptyPage.Root, { layout: "compact", children: [
29394
+ /* @__PURE__ */ jsx80(EmptyPage.Title, { as: "p", children: labels.empty }),
29395
+ disabled ? null : /* @__PURE__ */ jsx80(EmptyPage.Description, { children: labels.emptyHint })
28972
29396
  ] }),
28973
- renderItem: (item) => /* @__PURE__ */ jsx79(ItemIdContext, { value: getId(item), children: renderItem(item) })
29397
+ renderItem: (item) => /* @__PURE__ */ jsx80(ItemIdContext, { value: getId(item), children: renderItem(item) })
28974
29398
  }
28975
29399
  ) }) }) })
28976
29400
  ]
@@ -28994,7 +29418,7 @@ function KanbanItem({
28994
29418
  const href = board.hrefOf(id);
28995
29419
  const { openItem } = board;
28996
29420
  const focus = href !== void 0 ? { tabIndex: -1 } : openItem ? { tabIndex: 0 } : null;
28997
- return /* @__PURE__ */ jsxs62(
29421
+ return /* @__PURE__ */ jsxs63(
28998
29422
  Dnd.SortableItem,
28999
29423
  {
29000
29424
  id,
@@ -29029,7 +29453,7 @@ function KanbanItem({
29029
29453
  href !== void 0 ? (
29030
29454
  // A press on the link drags the card like a press anywhere on it (`data-dnd-handle`).
29031
29455
  // biome-ignore lint/a11y/useAnchorContent: named by `aria-label` (the card's `getLabel`); the card's content stays readable beside it
29032
- /* @__PURE__ */ jsx79(
29456
+ /* @__PURE__ */ jsx80(
29033
29457
  "a",
29034
29458
  {
29035
29459
  ref: linkRef,
@@ -29050,8 +29474,8 @@ function KanbanItem({
29050
29474
  }
29051
29475
  )
29052
29476
  ) : null,
29053
- /* @__PURE__ */ jsx79(ControlSizeProvider, { value: "m", children }),
29054
- /* @__PURE__ */ jsx79(KanbanItemSpinner, {})
29477
+ /* @__PURE__ */ jsx80(ControlSizeProvider, { value: "m", children }),
29478
+ /* @__PURE__ */ jsx80(KanbanItemSpinner, {})
29055
29479
  ]
29056
29480
  }
29057
29481
  );
@@ -29059,10 +29483,10 @@ function KanbanItem({
29059
29483
  KanbanItem.displayName = "Kanban.Item";
29060
29484
  function KanbanItemSpinner() {
29061
29485
  const busy = useSortableItemBusy();
29062
- return busy ? /* @__PURE__ */ jsx79(Spinner, { size: "s", "aria-hidden": "true", className: Kanban_default.itemSpinner }) : null;
29486
+ return busy ? /* @__PURE__ */ jsx80(Spinner, { size: "s", "aria-hidden": "true", className: Kanban_default.itemSpinner }) : null;
29063
29487
  }
29064
29488
  function KanbanItemHeader({ className, ...rest }) {
29065
- return /* @__PURE__ */ jsx79(
29489
+ return /* @__PURE__ */ jsx80(
29066
29490
  "div",
29067
29491
  {
29068
29492
  className: cx(
@@ -29079,23 +29503,23 @@ function KanbanItemHeader({ className, ...rest }) {
29079
29503
  }
29080
29504
  KanbanItemHeader.displayName = "Kanban.ItemHeader";
29081
29505
  function KanbanItemTitle({ className, ...rest }) {
29082
- return /* @__PURE__ */ jsx79("span", { className: cx(textRole_default.bodyM, Kanban_default.itemTitle, className), ...rest });
29506
+ return /* @__PURE__ */ jsx80("span", { className: cx(textRole_default.bodyM, Kanban_default.itemTitle, className), ...rest });
29083
29507
  }
29084
29508
  KanbanItemTitle.displayName = "Kanban.ItemTitle";
29085
29509
  function KanbanItemDescription({ className, ...rest }) {
29086
- return /* @__PURE__ */ jsx79("span", { className: cx(textRole_default.caption, Kanban_default.itemDescription, className), ...rest });
29510
+ return /* @__PURE__ */ jsx80("span", { className: cx(textRole_default.caption, Kanban_default.itemDescription, className), ...rest });
29087
29511
  }
29088
29512
  KanbanItemDescription.displayName = "Kanban.ItemDescription";
29089
29513
  function KanbanItemBadges(props) {
29090
- return /* @__PURE__ */ jsx79(Badge.Group, { ...props });
29514
+ return /* @__PURE__ */ jsx80(Badge.Group, { ...props });
29091
29515
  }
29092
29516
  KanbanItemBadges.displayName = "Kanban.ItemBadges";
29093
29517
  function KanbanItemFooter({ className, ...rest }) {
29094
- return /* @__PURE__ */ jsx79("div", { className: cx(fieldTierClass, Kanban_default.footer, className), "data-size": "xs", ...rest });
29518
+ return /* @__PURE__ */ jsx80("div", { className: cx(fieldTierClass, Kanban_default.footer, className), "data-size": "xs", ...rest });
29095
29519
  }
29096
29520
  KanbanItemFooter.displayName = "Kanban.ItemFooter";
29097
29521
  function KanbanItemCount({ className, ...rest }) {
29098
- return /* @__PURE__ */ jsx79("span", { className: cx(Kanban_default.count, className), ...rest });
29522
+ return /* @__PURE__ */ jsx80("span", { className: cx(Kanban_default.count, className), ...rest });
29099
29523
  }
29100
29524
  KanbanItemCount.displayName = "Kanban.ItemCount";
29101
29525
  var Kanban = {
@@ -29127,7 +29551,7 @@ var LoginForm_default = {
29127
29551
  };
29128
29552
 
29129
29553
  // src/components/login-form/LoginForm.tsx
29130
- import { jsx as jsx80 } from "react/jsx-runtime";
29554
+ import { jsx as jsx81 } from "react/jsx-runtime";
29131
29555
  var TITLE_ROLE = {
29132
29556
  xs: "title-s",
29133
29557
  s: "title-m",
@@ -29161,25 +29585,25 @@ function LoginFormRoot({
29161
29585
  ...rest
29162
29586
  }) {
29163
29587
  const { size, provide } = useHostTier(sizeProp);
29164
- return /* @__PURE__ */ jsx80(
29588
+ return /* @__PURE__ */ jsx81(
29165
29589
  "div",
29166
29590
  {
29167
29591
  ref,
29168
29592
  ...rest,
29169
29593
  className: cx(LoginForm_default.root, className),
29170
29594
  ...toDataAttributes({ size, align, flat }),
29171
- children: /* @__PURE__ */ jsx80(Card.Root, { flat, children: /* @__PURE__ */ jsx80("div", { className: LoginForm_default.content, children: /* @__PURE__ */ jsx80(AlignContext, { value: align, children: provide(children) }) }) })
29595
+ children: /* @__PURE__ */ jsx81(Card.Root, { flat, children: /* @__PURE__ */ jsx81("div", { className: LoginForm_default.content, children: /* @__PURE__ */ jsx81(AlignContext, { value: align, children: provide(children) }) }) })
29172
29596
  }
29173
29597
  );
29174
29598
  }
29175
29599
  LoginFormRoot.displayName = "LoginForm.Root";
29176
29600
  function LoginFormHeader({ className, children, ...rest }) {
29177
- return /* @__PURE__ */ jsx80("header", { className: cx(LoginForm_default.header, className), ...rest, children });
29601
+ return /* @__PURE__ */ jsx81("header", { className: cx(LoginForm_default.header, className), ...rest, children });
29178
29602
  }
29179
29603
  LoginFormHeader.displayName = "LoginForm.Header";
29180
29604
  function LoginFormLogo({ className, children, ...rest }) {
29181
29605
  const align = React88.useContext(AlignContext);
29182
- return /* @__PURE__ */ jsx80(
29606
+ return /* @__PURE__ */ jsx81(
29183
29607
  "div",
29184
29608
  {
29185
29609
  role: rest["aria-label"] ? "img" : void 0,
@@ -29193,7 +29617,7 @@ function LoginFormLogo({ className, children, ...rest }) {
29193
29617
  LoginFormLogo.displayName = "LoginForm.Logo";
29194
29618
  function LoginFormTitle({ as = "h1", className, children, ...rest }) {
29195
29619
  const size = useLoginFormSize();
29196
- return /* @__PURE__ */ jsx80(
29620
+ return /* @__PURE__ */ jsx81(
29197
29621
  Typography,
29198
29622
  {
29199
29623
  as,
@@ -29207,7 +29631,7 @@ function LoginFormTitle({ as = "h1", className, children, ...rest }) {
29207
29631
  LoginFormTitle.displayName = "LoginForm.Title";
29208
29632
  function LoginFormDescription({ className, children, ...rest }) {
29209
29633
  const size = useLoginFormSize();
29210
- return /* @__PURE__ */ jsx80(
29634
+ return /* @__PURE__ */ jsx81(
29211
29635
  Typography,
29212
29636
  {
29213
29637
  as: "p",
@@ -29221,20 +29645,20 @@ function LoginFormDescription({ className, children, ...rest }) {
29221
29645
  }
29222
29646
  LoginFormDescription.displayName = "LoginForm.Description";
29223
29647
  function LoginFormBody({ className, children, ...rest }) {
29224
- return /* @__PURE__ */ jsx80("div", { className: cx(LoginForm_default.body, className), ...rest, children });
29648
+ return /* @__PURE__ */ jsx81("div", { className: cx(LoginForm_default.body, className), ...rest, children });
29225
29649
  }
29226
29650
  LoginFormBody.displayName = "LoginForm.Body";
29227
29651
  function LoginFormForm({ className, children, ref, ...rest }) {
29228
- return /* @__PURE__ */ jsx80("form", { ref, className: cx(LoginForm_default.form, className), ...rest, children });
29652
+ return /* @__PURE__ */ jsx81("form", { ref, className: cx(LoginForm_default.form, className), ...rest, children });
29229
29653
  }
29230
29654
  LoginFormForm.displayName = "LoginForm.Form";
29231
29655
  function LoginFormActions({ className, children, ...rest }) {
29232
- return /* @__PURE__ */ jsx80("div", { className: cx(LoginForm_default.actions, className), ...rest, children });
29656
+ return /* @__PURE__ */ jsx81("div", { className: cx(LoginForm_default.actions, className), ...rest, children });
29233
29657
  }
29234
29658
  LoginFormActions.displayName = "LoginForm.Actions";
29235
29659
  function LoginFormFooter({ className, children, ...rest }) {
29236
29660
  const size = useLoginFormSize();
29237
- return /* @__PURE__ */ jsx80(
29661
+ return /* @__PURE__ */ jsx81(
29238
29662
  Typography,
29239
29663
  {
29240
29664
  as: "p",
@@ -29268,7 +29692,7 @@ var NativeSelect_default = {
29268
29692
  };
29269
29693
 
29270
29694
  // src/components/native-select/NativeSelect.tsx
29271
- import { jsx as jsx81, jsxs as jsxs63 } from "react/jsx-runtime";
29695
+ import { jsx as jsx82, jsxs as jsxs64 } from "react/jsx-runtime";
29272
29696
  var NATIVE_SELECT_LABELS = { optional: "\u043D\u0435\u043E\u0431\u044F\u0437\u0430\u0442\u0435\u043B\u044C\u043D\u043E" };
29273
29697
  function NativeSelect({
29274
29698
  size: sizeProp,
@@ -29300,7 +29724,7 @@ function NativeSelect({
29300
29724
  const ids = useFieldFrame(id, { label, hint, error, invalid, required }, ariaDescribedBy);
29301
29725
  const initial = defaultValue ?? (value === void 0 && placeholder ? "" : void 0);
29302
29726
  return tier.provide(
29303
- /* @__PURE__ */ jsx81(
29727
+ /* @__PURE__ */ jsx82(
29304
29728
  FieldFrame,
29305
29729
  {
29306
29730
  size,
@@ -29314,8 +29738,8 @@ function NativeSelect({
29314
29738
  disabled,
29315
29739
  optionalLabel: labels.optional,
29316
29740
  className,
29317
- children: /* @__PURE__ */ jsxs63("span", { className: cx(fieldTierClass, NativeSelect_default.root), ...toDataAttributes({ size }), children: [
29318
- /* @__PURE__ */ jsxs63(
29741
+ children: /* @__PURE__ */ jsxs64("span", { className: cx(fieldTierClass, NativeSelect_default.root), ...toDataAttributes({ size }), children: [
29742
+ /* @__PURE__ */ jsxs64(
29319
29743
  "select",
29320
29744
  {
29321
29745
  ...rest,
@@ -29337,12 +29761,12 @@ function NativeSelect({
29337
29761
  "focus-ring": focusRing
29338
29762
  }),
29339
29763
  children: [
29340
- placeholder ? /* @__PURE__ */ jsx81("option", { value: "", className: NativeSelect_default.placeholder, children: placeholder }) : null,
29764
+ placeholder ? /* @__PURE__ */ jsx82("option", { value: "", className: NativeSelect_default.placeholder, children: placeholder }) : null,
29341
29765
  children
29342
29766
  ]
29343
29767
  }
29344
29768
  ),
29345
- /* @__PURE__ */ jsx81("span", { className: NativeSelect_default.chevron, "aria-hidden": "true", children: /* @__PURE__ */ jsx81(Icon, { name: "nav.chevronDown" }) })
29769
+ /* @__PURE__ */ jsx82("span", { className: NativeSelect_default.chevron, "aria-hidden": "true", children: /* @__PURE__ */ jsx82(Icon, { name: "nav.chevronDown" }) })
29346
29770
  ] })
29347
29771
  }
29348
29772
  )
@@ -29378,7 +29802,7 @@ var Notification_default = {
29378
29802
  };
29379
29803
 
29380
29804
  // src/components/notification/Notification.tsx
29381
- import { jsx as jsx82, jsxs as jsxs64 } from "react/jsx-runtime";
29805
+ import { jsx as jsx83, jsxs as jsxs65 } from "react/jsx-runtime";
29382
29806
  var NOTIFICATION_LABELS = {
29383
29807
  close: "\u0417\u0430\u043A\u0440\u044B\u0442\u044C \u0443\u0432\u0435\u0434\u043E\u043C\u043B\u0435\u043D\u0438\u0435",
29384
29808
  regionTopLeft: "\u0423\u0432\u0435\u0434\u043E\u043C\u043B\u0435\u043D\u0438\u044F \u0441\u0432\u0435\u0440\u0445\u0443 \u0441\u043B\u0435\u0432\u0430",
@@ -29424,7 +29848,7 @@ function CardView({
29424
29848
  const size = tier.size;
29425
29849
  const liveRole = tone === "danger" || tone === "warning" ? "alert" : "status";
29426
29850
  return tier.provide(
29427
- /* @__PURE__ */ jsxs64(
29851
+ /* @__PURE__ */ jsxs65(
29428
29852
  "article",
29429
29853
  {
29430
29854
  ...rest,
@@ -29440,14 +29864,14 @@ function CardView({
29440
29864
  "stack-expanded": stackExpanded
29441
29865
  }),
29442
29866
  children: [
29443
- /* @__PURE__ */ jsx82("div", { className: cx(Notification_default.iconWrap, iconSlotClass), "aria-hidden": "true", children: icon ?? /* @__PURE__ */ jsx82(Icon, { name: TONE_ICON[tone] }) }),
29444
- /* @__PURE__ */ jsxs64("div", { className: Notification_default.content, children: [
29445
- /* @__PURE__ */ jsxs64("header", { className: Notification_default.header, children: [
29446
- /* @__PURE__ */ jsx82("p", { className: Notification_default.title, children: title }),
29447
- badge !== void 0 ? /* @__PURE__ */ jsx82(Badge.Root, { size: "xs", tone, children: badge }) : null
29867
+ /* @__PURE__ */ jsx83("div", { className: cx(Notification_default.iconWrap, iconSlotClass), "aria-hidden": "true", children: icon ?? /* @__PURE__ */ jsx83(Icon, { name: TONE_ICON[tone] }) }),
29868
+ /* @__PURE__ */ jsxs65("div", { className: Notification_default.content, children: [
29869
+ /* @__PURE__ */ jsxs65("header", { className: Notification_default.header, children: [
29870
+ /* @__PURE__ */ jsx83("p", { className: Notification_default.title, children: title }),
29871
+ badge !== void 0 ? /* @__PURE__ */ jsx83(Badge.Root, { size: "xs", tone, children: badge }) : null
29448
29872
  ] }),
29449
- description ? /* @__PURE__ */ jsx82("p", { className: Notification_default.description, children: description }) : null,
29450
- action ? /* @__PURE__ */ jsx82("div", { className: Notification_default.actionRow, children: /* @__PURE__ */ jsx82(
29873
+ description ? /* @__PURE__ */ jsx83("p", { className: Notification_default.description, children: description }) : null,
29874
+ action ? /* @__PURE__ */ jsx83("div", { className: Notification_default.actionRow, children: /* @__PURE__ */ jsx83(
29451
29875
  Button.Root,
29452
29876
  {
29453
29877
  variant: "soft",
@@ -29461,7 +29885,7 @@ function CardView({
29461
29885
  }
29462
29886
  ) }) : null
29463
29887
  ] }),
29464
- onClose ? /* @__PURE__ */ jsx82("div", { className: Notification_default.closeWrap, children: /* @__PURE__ */ jsx82(
29888
+ onClose ? /* @__PURE__ */ jsx83("div", { className: Notification_default.closeWrap, children: /* @__PURE__ */ jsx83(
29465
29889
  Button.Root,
29466
29890
  {
29467
29891
  variant: "ghost",
@@ -29469,10 +29893,10 @@ function CardView({
29469
29893
  size: compactTier(size),
29470
29894
  "aria-label": labels.close,
29471
29895
  onClick: onClose,
29472
- children: /* @__PURE__ */ jsx82(Button.Icon, { children: /* @__PURE__ */ jsx82(Icon, { name: "action.close" }) })
29896
+ children: /* @__PURE__ */ jsx83(Button.Icon, { children: /* @__PURE__ */ jsx83(Icon, { name: "action.close" }) })
29473
29897
  }
29474
29898
  ) }) : null,
29475
- countdown ? /* @__PURE__ */ jsx82("div", { className: Notification_default.progressTrack, "aria-hidden": "true", children: /* @__PURE__ */ jsx82(CountdownLine, { ...countdown }) }) : null
29899
+ countdown ? /* @__PURE__ */ jsx83("div", { className: Notification_default.progressTrack, "aria-hidden": "true", children: /* @__PURE__ */ jsx83(CountdownLine, { ...countdown }) }) : null
29476
29900
  ]
29477
29901
  }
29478
29902
  )
@@ -29507,10 +29931,10 @@ function CountdownLine({ duration, paused, onEnd }) {
29507
29931
  if (paused) clock.pause();
29508
29932
  else clock.play();
29509
29933
  }, [paused]);
29510
- return /* @__PURE__ */ jsx82("span", { ref: lineRef, className: Notification_default.progressValue });
29934
+ return /* @__PURE__ */ jsx83("span", { ref: lineRef, className: Notification_default.progressValue });
29511
29935
  }
29512
29936
  function NotificationCard({ onDismiss, ...props }) {
29513
- return /* @__PURE__ */ jsx82(CardView, { ...props, onClose: onDismiss });
29937
+ return /* @__PURE__ */ jsx83(CardView, { ...props, onClose: onDismiss });
29514
29938
  }
29515
29939
  function subscribeVisibility(listener) {
29516
29940
  document.addEventListener("visibilitychange", listener);
@@ -29526,7 +29950,7 @@ function useDocumentHidden() {
29526
29950
  function ToastCard({ item, paused, onDismiss, stackDepth, stackExpanded }) {
29527
29951
  const hidden = useDocumentHidden();
29528
29952
  const timed = !item.persistent && item.duration > 0;
29529
- return /* @__PURE__ */ jsx82(
29953
+ return /* @__PURE__ */ jsx83(
29530
29954
  CardView,
29531
29955
  {
29532
29956
  tone: item.tone,
@@ -29551,7 +29975,7 @@ function ToastCard({ item, paused, onDismiss, stackDepth, stackExpanded }) {
29551
29975
 
29552
29976
  // src/components/notification/NotificationStore.tsx
29553
29977
  import * as React90 from "react";
29554
- import { jsx as jsx83, jsxs as jsxs65 } from "react/jsx-runtime";
29978
+ import { jsx as jsx84, jsxs as jsxs66 } from "react/jsx-runtime";
29555
29979
  var DEFAULT_DURATION = 5e3;
29556
29980
  var PEEK_VISIBLE = 3;
29557
29981
  var SCALE_STEP = 0.05;
@@ -29682,7 +30106,7 @@ function NotificationStack({
29682
30106
  if (!ids.has(id)) lastLayoutRef.current.delete(id);
29683
30107
  }
29684
30108
  });
29685
- return /* @__PURE__ */ jsx83(
30109
+ return /* @__PURE__ */ jsx84(
29686
30110
  "ol",
29687
30111
  {
29688
30112
  ref: listRef,
@@ -29709,7 +30133,7 @@ function NotificationStack({
29709
30133
  children: items.map((item) => {
29710
30134
  const closing = item.dismissing === true;
29711
30135
  const layout = layouts.get(item.id) ?? lastLayoutRef.current.get(item.id) ?? RESTING_LAYOUT;
29712
- return /* @__PURE__ */ jsx83(
30136
+ return /* @__PURE__ */ jsx84(
29713
30137
  NotificationStackItem,
29714
30138
  {
29715
30139
  item,
@@ -29824,7 +30248,7 @@ var NotificationStackItem = React90.memo(function NotificationStackItem2({
29824
30248
  if (amount === 0 || prefersReducedMotion()) delete el.dataset.swipe;
29825
30249
  else el.dataset.swipe = "return";
29826
30250
  };
29827
- return /* @__PURE__ */ jsx83(
30251
+ return /* @__PURE__ */ jsx84(
29828
30252
  "li",
29829
30253
  {
29830
30254
  ref,
@@ -29838,7 +30262,7 @@ var NotificationStackItem = React90.memo(function NotificationStackItem2({
29838
30262
  "--ntf-opacity": opacity,
29839
30263
  zIndex: Z_FRONT - index
29840
30264
  },
29841
- children: /* @__PURE__ */ jsx83(
30265
+ children: /* @__PURE__ */ jsx84(
29842
30266
  "div",
29843
30267
  {
29844
30268
  className: Notification_default.motion,
@@ -29855,7 +30279,7 @@ var NotificationStackItem = React90.memo(function NotificationStackItem2({
29855
30279
  delete event.currentTarget.dataset.swipe;
29856
30280
  }
29857
30281
  },
29858
- children: /* @__PURE__ */ jsx83(
30282
+ children: /* @__PURE__ */ jsx84(
29859
30283
  ToastCard,
29860
30284
  {
29861
30285
  item,
@@ -29891,18 +30315,18 @@ function NotificationToaster({
29891
30315
  }
29892
30316
  return map;
29893
30317
  }, [entries]);
29894
- return /* @__PURE__ */ jsx83(Portal, { children: /* @__PURE__ */ jsx83("div", { className: Notification_default.viewport, ...{ [LIVE_REGION_ATTR]: "" }, children: POSITIONS.map((pos) => {
30318
+ return /* @__PURE__ */ jsx84(Portal, { children: /* @__PURE__ */ jsx84("div", { className: Notification_default.viewport, ...{ [LIVE_REGION_ATTR]: "" }, children: POSITIONS.map((pos) => {
29895
30319
  const byTone = grouped.get(pos);
29896
30320
  if (!byTone?.size) return null;
29897
30321
  const [vertical, horizontal] = pos.split("-");
29898
30322
  const stacks = TONES.map((tone) => ({ tone, items: byTone.get(tone) ?? [] })).filter(
29899
30323
  (s) => s.items.length > 0
29900
30324
  );
29901
- return /* @__PURE__ */ jsx83(
30325
+ return /* @__PURE__ */ jsx84(
29902
30326
  "section",
29903
30327
  {
29904
30328
  className: `${Notification_default.zone} ${Notification_default[vertical]} ${Notification_default[horizontal]}`,
29905
- children: stacks.map((s) => /* @__PURE__ */ jsx83(
30329
+ children: stacks.map((s) => /* @__PURE__ */ jsx84(
29906
30330
  NotificationStack,
29907
30331
  {
29908
30332
  position: pos,
@@ -30023,9 +30447,9 @@ function NotificationProvider({
30023
30447
  () => ({ items: publicItems, notify, dismiss, dismissAll }),
30024
30448
  [publicItems, notify, dismiss, dismissAll]
30025
30449
  );
30026
- return /* @__PURE__ */ jsx83(StoreProvider, { value, children: /* @__PURE__ */ jsxs65(NotificationLabelsContext.Provider, { value: labels, children: [
30450
+ return /* @__PURE__ */ jsx84(StoreProvider, { value, children: /* @__PURE__ */ jsxs66(NotificationLabelsContext.Provider, { value: labels, children: [
30027
30451
  children,
30028
- /* @__PURE__ */ jsx83(NotificationToaster, { entries, onDismiss: leave, onExited: exited })
30452
+ /* @__PURE__ */ jsx84(NotificationToaster, { entries, onDismiss: leave, onExited: exited })
30029
30453
  ] }) });
30030
30454
  }
30031
30455
  function useNotifications() {
@@ -30051,7 +30475,7 @@ var ProgressCircle_default = {
30051
30475
  };
30052
30476
 
30053
30477
  // src/components/progress-circle/ProgressCircle.tsx
30054
- import { Fragment as Fragment42, jsx as jsx84, jsxs as jsxs66 } from "react/jsx-runtime";
30478
+ import { Fragment as Fragment44, jsx as jsx85, jsxs as jsxs67 } from "react/jsx-runtime";
30055
30479
  var HAIRLINE_GAP = RING_DATA_STROKE * 0.75;
30056
30480
  var LOADING_ROWS3 = 3;
30057
30481
  function arcStyle(start, length) {
@@ -30073,9 +30497,9 @@ function SegmentArcs({
30073
30497
  }) {
30074
30498
  if (gap === "hairline" && arcs.length > 1) {
30075
30499
  const inset = (RING_DATA_STROKE + HAIRLINE_GAP) / 2;
30076
- return /* @__PURE__ */ jsx84(Fragment42, { children: arcs.map((a, i) => {
30500
+ return /* @__PURE__ */ jsx85(Fragment44, { children: arcs.map((a, i) => {
30077
30501
  const own = a.rest ? { className: void 0 } : fillProps(a.fill);
30078
- return /* @__PURE__ */ jsx84(
30502
+ return /* @__PURE__ */ jsx85(
30079
30503
  RingCircle,
30080
30504
  {
30081
30505
  ...own,
@@ -30089,10 +30513,10 @@ function SegmentArcs({
30089
30513
  const parts = arcs.filter((a) => !a.rest);
30090
30514
  const first = parts[0];
30091
30515
  const last = parts[parts.length - 1];
30092
- return /* @__PURE__ */ jsxs66(Fragment42, { children: [
30516
+ return /* @__PURE__ */ jsxs67(Fragment44, { children: [
30093
30517
  parts.map((a, i) => {
30094
30518
  const own = fillProps(a.fill);
30095
- return /* @__PURE__ */ jsx84(
30519
+ return /* @__PURE__ */ jsx85(
30096
30520
  RingCircle,
30097
30521
  {
30098
30522
  ...own,
@@ -30102,15 +30526,15 @@ function SegmentArcs({
30102
30526
  i
30103
30527
  );
30104
30528
  }),
30105
- first && last && !closed ? /* @__PURE__ */ jsxs66(Fragment42, { children: [
30106
- /* @__PURE__ */ jsx84(Cap, { position: first.start, fill: first.fill }),
30107
- /* @__PURE__ */ jsx84(Cap, { position: last.start + last.length, fill: last.fill })
30529
+ first && last && !closed ? /* @__PURE__ */ jsxs67(Fragment44, { children: [
30530
+ /* @__PURE__ */ jsx85(Cap, { position: first.start, fill: first.fill }),
30531
+ /* @__PURE__ */ jsx85(Cap, { position: last.start + last.length, fill: last.fill })
30108
30532
  ] }) : null
30109
30533
  ] });
30110
30534
  }
30111
30535
  function Cap({ position, fill }) {
30112
30536
  const own = fillProps(fill);
30113
- return /* @__PURE__ */ jsx84(RingCap, { position, ...own, className: cx(own.className, ProgressCircle_default.cap) });
30537
+ return /* @__PURE__ */ jsx85(RingCap, { position, ...own, className: cx(own.className, ProgressCircle_default.cap) });
30114
30538
  }
30115
30539
  function ProgressCircle(props) {
30116
30540
  const {
@@ -30159,10 +30583,10 @@ function ProgressCircle(props) {
30159
30583
  "aria-describedby": descriptionId
30160
30584
  } : { "aria-label": text };
30161
30585
  if (label && !showLegend) {
30162
- description = /* @__PURE__ */ jsx84(VisuallyHidden, { id: descriptionId, children: text });
30586
+ description = /* @__PURE__ */ jsx85(VisuallyHidden, { id: descriptionId, children: text });
30163
30587
  }
30164
30588
  if (legend) {
30165
- legendNode = loading ? /* @__PURE__ */ jsx84(ProgressLegendSkeleton, { rows: segmentsProp.length || LOADING_ROWS3, size }) : showLegend ? /* @__PURE__ */ jsx84(
30589
+ legendNode = loading ? /* @__PURE__ */ jsx85(ProgressLegendSkeleton, { rows: segmentsProp.length || LOADING_ROWS3, size }) : showLegend ? /* @__PURE__ */ jsx85(
30166
30590
  ProgressLegend,
30167
30591
  {
30168
30592
  id: label ? descriptionId : void 0,
@@ -30173,7 +30597,7 @@ function ProgressCircle(props) {
30173
30597
  }
30174
30598
  ) : null;
30175
30599
  }
30176
- ring = /* @__PURE__ */ jsx84(
30600
+ ring = /* @__PURE__ */ jsx85(
30177
30601
  Ring,
30178
30602
  {
30179
30603
  value: 0,
@@ -30183,14 +30607,14 @@ function ProgressCircle(props) {
30183
30607
  role: "group",
30184
30608
  ...a11y,
30185
30609
  ...toDataAttributes({ "segment-gap": gap }),
30186
- children: total > 0 ? /* @__PURE__ */ jsx84(SegmentArcs, { arcs, gap, closed: free === 0 }) : null
30610
+ children: total > 0 ? /* @__PURE__ */ jsx85(SegmentArcs, { arcs, gap, closed: free === 0 }) : null
30187
30611
  }
30188
30612
  );
30189
30613
  } else {
30190
30614
  const unknown = valueProp === null || valueProp === void 0;
30191
30615
  const { value, max, ratio } = resolveValue(valueProp ?? 0, maxProp);
30192
30616
  tone = toneProp ?? "accent";
30193
- ring = /* @__PURE__ */ jsx84(
30617
+ ring = /* @__PURE__ */ jsx85(
30194
30618
  Ring,
30195
30619
  {
30196
30620
  value: unknown ? null : ratio,
@@ -30207,15 +30631,15 @@ function ProgressCircle(props) {
30207
30631
  }
30208
30632
  );
30209
30633
  }
30210
- const body = /* @__PURE__ */ jsxs66(Fragment42, { children: [
30211
- /* @__PURE__ */ jsx84(RegionSwap, { state: loading ? "loading" : "data", fill: true, children: loading ? /* @__PURE__ */ jsx84(Skeleton, { shape: "block", className: ProgressCircle_default.ringSkeleton }) : ring }),
30634
+ const body = /* @__PURE__ */ jsxs67(Fragment44, { children: [
30635
+ /* @__PURE__ */ jsx85(RegionSwap, { state: loading ? "loading" : "data", fill: true, children: loading ? /* @__PURE__ */ jsx85(Skeleton, { shape: "block", className: ProgressCircle_default.ringSkeleton }) : ring }),
30212
30636
  loading ? null : description,
30213
- showInner ? /* @__PURE__ */ jsx84(
30637
+ showInner ? /* @__PURE__ */ jsx85(
30214
30638
  "div",
30215
30639
  {
30216
30640
  className: cx(ProgressCircle_default.inner, tone !== "inherit" && ProgressCircle_default.ink),
30217
30641
  "aria-hidden": valueText !== void 0 ? true : void 0,
30218
- children: /* @__PURE__ */ jsx84(GlyphSwap, { children })
30642
+ children: /* @__PURE__ */ jsx85(GlyphSwap, { children })
30219
30643
  }
30220
30644
  ) : null
30221
30645
  ] });
@@ -30226,14 +30650,14 @@ function ProgressCircle(props) {
30226
30650
  };
30227
30651
  if (legend) {
30228
30652
  return provide(
30229
- /* @__PURE__ */ jsxs66("div", { className: cx(ProgressCircle_default.root, className), ...rootProps, children: [
30230
- /* @__PURE__ */ jsx84("div", { className: ProgressCircle_default.ring, children: body }),
30231
- /* @__PURE__ */ jsx84(RegionSwap, { state: loading ? "loading" : "data", className: ProgressCircle_default.legend, children: legendNode })
30653
+ /* @__PURE__ */ jsxs67("div", { className: cx(ProgressCircle_default.root, className), ...rootProps, children: [
30654
+ /* @__PURE__ */ jsx85("div", { className: ProgressCircle_default.ring, children: body }),
30655
+ /* @__PURE__ */ jsx85(RegionSwap, { state: loading ? "loading" : "data", className: ProgressCircle_default.legend, children: legendNode })
30232
30656
  ] })
30233
30657
  );
30234
30658
  }
30235
30659
  return provide(
30236
- /* @__PURE__ */ jsx84("div", { className: cx(ProgressCircle_default.root, className), ...rootProps, children: body })
30660
+ /* @__PURE__ */ jsx85("div", { className: cx(ProgressCircle_default.root, className), ...rootProps, children: body })
30237
30661
  );
30238
30662
  }
30239
30663
 
@@ -30249,7 +30673,7 @@ var Radio_default = {
30249
30673
  };
30250
30674
 
30251
30675
  // src/components/radio/Radio.tsx
30252
- import { Fragment as Fragment43, jsx as jsx85, jsxs as jsxs67 } from "react/jsx-runtime";
30676
+ import { Fragment as Fragment45, jsx as jsx86, jsxs as jsxs68 } from "react/jsx-runtime";
30253
30677
  var RADIO_GROUP_LABELS = { optional: "\u043D\u0435\u043E\u0431\u044F\u0437\u0430\u0442\u0435\u043B\u044C\u043D\u043E" };
30254
30678
  var [RadioGroupProvider, useRadioGroupContext] = createComponentContext("Radio.Group");
30255
30679
  function RadioGroup({
@@ -30297,8 +30721,8 @@ function RadioGroup({
30297
30721
  () => ({ name, value, setValue, size, disabled, invalid: ids.invalid, required }),
30298
30722
  [name, value, setValue, size, disabled, ids.invalid, required]
30299
30723
  );
30300
- return /* @__PURE__ */ jsx85(RadioGroupProvider, { value: ctxValue, children: tier.provide(
30301
- /* @__PURE__ */ jsx85(
30724
+ return /* @__PURE__ */ jsx86(RadioGroupProvider, { value: ctxValue, children: tier.provide(
30725
+ /* @__PURE__ */ jsx86(
30302
30726
  FieldFrame,
30303
30727
  {
30304
30728
  ...rest,
@@ -30314,7 +30738,7 @@ function RadioGroup({
30314
30738
  optionalLabel: labels.optional,
30315
30739
  group: true,
30316
30740
  className,
30317
- children: /* @__PURE__ */ jsx85(
30741
+ children: /* @__PURE__ */ jsx86(
30318
30742
  "div",
30319
30743
  {
30320
30744
  id: ids.controlId,
@@ -30351,7 +30775,7 @@ function RadioRoot({
30351
30775
  const ids = useFieldFrame(id, { hint, invalid: group.invalid }, ariaDescribedBy);
30352
30776
  const disabled = group.disabled || disabledProp;
30353
30777
  const checked = group.value === value;
30354
- return /* @__PURE__ */ jsx85(
30778
+ return /* @__PURE__ */ jsx86(
30355
30779
  ChoiceField,
30356
30780
  {
30357
30781
  ids,
@@ -30362,8 +30786,8 @@ function RadioRoot({
30362
30786
  hint,
30363
30787
  hintTone,
30364
30788
  className: cx(Radio_default.root, className),
30365
- control: /* @__PURE__ */ jsxs67(Fragment43, { children: [
30366
- /* @__PURE__ */ jsx85(
30789
+ control: /* @__PURE__ */ jsxs68(Fragment45, { children: [
30790
+ /* @__PURE__ */ jsx86(
30367
30791
  "input",
30368
30792
  {
30369
30793
  ...inputRest,
@@ -30381,12 +30805,12 @@ function RadioRoot({
30381
30805
  "aria-describedby": ids.describedBy
30382
30806
  }
30383
30807
  ),
30384
- /* @__PURE__ */ jsx85(
30808
+ /* @__PURE__ */ jsx86(
30385
30809
  "span",
30386
30810
  {
30387
30811
  className: cx(choiceVisualClass, choiceBoxClass, Radio_default.control),
30388
30812
  "aria-hidden": "true",
30389
- children: /* @__PURE__ */ jsx85("span", { className: Radio_default.dot })
30813
+ children: /* @__PURE__ */ jsx86("span", { className: Radio_default.dot })
30390
30814
  }
30391
30815
  )
30392
30816
  ] }),
@@ -30396,7 +30820,7 @@ function RadioRoot({
30396
30820
  }
30397
30821
  RadioRoot.displayName = "Radio.Root";
30398
30822
  function RadioLabel(props) {
30399
- return /* @__PURE__ */ jsx85(ChoiceLabel, { ...props });
30823
+ return /* @__PURE__ */ jsx86(ChoiceLabel, { ...props });
30400
30824
  }
30401
30825
  RadioLabel.displayName = "Radio.Label";
30402
30826
  var Radio = {
@@ -30411,13 +30835,13 @@ var RichText_default = {
30411
30835
  };
30412
30836
 
30413
30837
  // src/components/rich-text/RichText.tsx
30414
- import { jsx as jsx86 } from "react/jsx-runtime";
30838
+ import { jsx as jsx87 } from "react/jsx-runtime";
30415
30839
  var RICH_TEXT_LABELS = {
30416
30840
  spoiler: "\u0421\u043A\u0440\u044B\u0442\u044B\u0439 \u0442\u0435\u043A\u0441\u0442"
30417
30841
  };
30418
30842
  function RichText2({ children, labels: labelsProp, className, ...rest }) {
30419
30843
  const labels = useLabels(RICH_TEXT_LABELS, labelsProp);
30420
- return /* @__PURE__ */ jsx86("div", { className: cx(RichText_default.root, className), ...rest, children: /* @__PURE__ */ jsx86(RichText, { source: children, labels }) });
30844
+ return /* @__PURE__ */ jsx87("div", { className: cx(RichText_default.root, className), ...rest, children: /* @__PURE__ */ jsx87(RichText, { source: children, labels }) });
30421
30845
  }
30422
30846
 
30423
30847
  // src/components/sheet/Sheet.module.css
@@ -30426,14 +30850,14 @@ var Sheet_default = {
30426
30850
  };
30427
30851
 
30428
30852
  // src/components/sheet/Sheet.tsx
30429
- import { jsx as jsx87 } from "react/jsx-runtime";
30853
+ import { jsx as jsx88 } from "react/jsx-runtime";
30430
30854
  function SheetRoot({ children, ...options }) {
30431
30855
  const state = useDialogRoot(options);
30432
- return /* @__PURE__ */ jsx87(DialogRootProvider, { value: state, children });
30856
+ return /* @__PURE__ */ jsx88(DialogRootProvider, { value: state, children });
30433
30857
  }
30434
30858
  SheetRoot.displayName = "Sheet.Root";
30435
30859
  function SheetContent(props) {
30436
- return /* @__PURE__ */ jsx87(
30860
+ return /* @__PURE__ */ jsx88(
30437
30861
  DialogPanel,
30438
30862
  {
30439
30863
  ...props,
@@ -30580,7 +31004,7 @@ var Sparkline_default = {
30580
31004
  };
30581
31005
 
30582
31006
  // src/components/sparkline/Sparkline.tsx
30583
- import { Fragment as Fragment44, jsx as jsx88, jsxs as jsxs68 } from "react/jsx-runtime";
31007
+ import { Fragment as Fragment46, jsx as jsx89, jsxs as jsxs69 } from "react/jsx-runtime";
30584
31008
  var SPARKLINE_LABELS = {
30585
31009
  point: "{label}: {value}",
30586
31010
  period: "{first} \u2013 {last}",
@@ -30666,8 +31090,8 @@ function Sparkline({
30666
31090
  const drawing = React93.useMemo(() => {
30667
31091
  const { paths } = geometry;
30668
31092
  if (!paths) return null;
30669
- return /* @__PURE__ */ jsxs68("div", { className: Sparkline_default.drawing, "aria-hidden": "true", children: [
30670
- /* @__PURE__ */ jsxs68(
31093
+ return /* @__PURE__ */ jsxs69("div", { className: Sparkline_default.drawing, "aria-hidden": "true", children: [
31094
+ /* @__PURE__ */ jsxs69(
30671
31095
  "svg",
30672
31096
  {
30673
31097
  className: Sparkline_default.svg,
@@ -30675,18 +31099,18 @@ function Sparkline({
30675
31099
  preserveAspectRatio: "none",
30676
31100
  "aria-hidden": "true",
30677
31101
  children: [
30678
- variant === "area" && paths.area ? /* @__PURE__ */ jsxs68(Fragment44, { children: [
30679
- /* @__PURE__ */ jsx88("defs", { children: /* @__PURE__ */ jsxs68("linearGradient", { id: gradientId, x1: "0", y1: "0", x2: "0", y2: "1", children: [
30680
- /* @__PURE__ */ jsx88("stop", { offset: "0", className: Sparkline_default.fadeTop }),
30681
- /* @__PURE__ */ jsx88("stop", { offset: "1", className: Sparkline_default.fadeBottom })
31102
+ variant === "area" && paths.area ? /* @__PURE__ */ jsxs69(Fragment46, { children: [
31103
+ /* @__PURE__ */ jsx89("defs", { children: /* @__PURE__ */ jsxs69("linearGradient", { id: gradientId, x1: "0", y1: "0", x2: "0", y2: "1", children: [
31104
+ /* @__PURE__ */ jsx89("stop", { offset: "0", className: Sparkline_default.fadeTop }),
31105
+ /* @__PURE__ */ jsx89("stop", { offset: "1", className: Sparkline_default.fadeBottom })
30682
31106
  ] }) }),
30683
- /* @__PURE__ */ jsx88("path", { className: Sparkline_default.area, d: paths.area, fill: `url(#${gradientId})` })
31107
+ /* @__PURE__ */ jsx89("path", { className: Sparkline_default.area, d: paths.area, fill: `url(#${gradientId})` })
30684
31108
  ] }) : null,
30685
- paths.line ? /* @__PURE__ */ jsx88("path", { className: Sparkline_default.line, d: paths.line }) : null
31109
+ paths.line ? /* @__PURE__ */ jsx89("path", { className: Sparkline_default.line, d: paths.line }) : null
30686
31110
  ]
30687
31111
  }
30688
31112
  ),
30689
- paths.lone.map((i) => /* @__PURE__ */ jsx88(
31113
+ paths.lone.map((i) => /* @__PURE__ */ jsx89(
30690
31114
  "span",
30691
31115
  {
30692
31116
  className: Sparkline_default.lone,
@@ -30717,7 +31141,7 @@ function Sparkline({
30717
31141
  const layoutAttr = compact ? layout : void 0;
30718
31142
  const plotNode = plotRef.current;
30719
31143
  const tooltipPoint = active === null || !point ? null : pointer ?? (plotNode ? { x: x(index) * plotNode.offsetWidth, y: plotNode.offsetHeight / 2 } : null);
30720
- return /* @__PURE__ */ jsxs68(
31144
+ return /* @__PURE__ */ jsxs69(
30721
31145
  "div",
30722
31146
  {
30723
31147
  ...rest,
@@ -30729,20 +31153,20 @@ function Sparkline({
30729
31153
  "data-size": compact ? "xs" : void 0,
30730
31154
  "aria-busy": loading || void 0,
30731
31155
  children: [
30732
- compact ? null : /* @__PURE__ */ jsxs68(Fragment44, { children: [
30733
- /* @__PURE__ */ jsxs68("div", { className: Sparkline_default.head, children: [
30734
- /* @__PURE__ */ jsx88("span", { className: Sparkline_default.label, children: label }),
30735
- /* @__PURE__ */ jsx88(RegionSwap, { state: stateKey, className: Sparkline_default.date, children: loading ? /* @__PURE__ */ jsx88(Skeleton, { shape: "text", size: "s", className: Sparkline_default.dateSkeleton }) : headDate })
31156
+ compact ? null : /* @__PURE__ */ jsxs69(Fragment46, { children: [
31157
+ /* @__PURE__ */ jsxs69("div", { className: Sparkline_default.head, children: [
31158
+ /* @__PURE__ */ jsx89("span", { className: Sparkline_default.label, children: label }),
31159
+ /* @__PURE__ */ jsx89(RegionSwap, { state: stateKey, className: Sparkline_default.date, children: loading ? /* @__PURE__ */ jsx89(Skeleton, { shape: "text", size: "s", className: Sparkline_default.dateSkeleton }) : headDate })
30736
31160
  ] }),
30737
- /* @__PURE__ */ jsx88(RegionSwap, { state: stateKey, children: loading ? /* @__PURE__ */ jsx88(Skeleton, { shape: "block", className: Sparkline_default.valueSkeleton }) : /* @__PURE__ */ jsxs68("div", { className: Sparkline_default.valueRow, children: [
30738
- /* @__PURE__ */ jsx88("span", { className: Sparkline_default.value, "data-empty": restValue === null || void 0, children: atRest ? /* @__PURE__ */ jsx88(RollingNumber, { children: headValue }) : headValue }),
30739
- delta !== null ? /* @__PURE__ */ jsxs68(Badge.Root, { tone: delta < 0 ? "danger" : "success", className: Sparkline_default.change, children: [
30740
- /* @__PURE__ */ jsx88(Badge.Icon, { className: Sparkline_default.trend, "data-down": delta < 0 || void 0, children: /* @__PURE__ */ jsx88(Icon, { name: "status.trendUp" }) }),
31161
+ /* @__PURE__ */ jsx89(RegionSwap, { state: stateKey, children: loading ? /* @__PURE__ */ jsx89(Skeleton, { shape: "block", className: Sparkline_default.valueSkeleton }) : /* @__PURE__ */ jsxs69("div", { className: Sparkline_default.valueRow, children: [
31162
+ /* @__PURE__ */ jsx89("span", { className: Sparkline_default.value, "data-empty": restValue === null || void 0, children: atRest ? /* @__PURE__ */ jsx89(RollingNumber, { children: headValue }) : headValue }),
31163
+ delta !== null ? /* @__PURE__ */ jsxs69(Badge.Root, { tone: delta < 0 ? "danger" : "success", className: Sparkline_default.change, children: [
31164
+ /* @__PURE__ */ jsx89(Badge.Icon, { className: Sparkline_default.trend, "data-down": delta < 0 || void 0, children: /* @__PURE__ */ jsx89(Icon, { name: "status.trendUp" }) }),
30741
31165
  `${delta > 0 ? "+" : delta < 0 ? "\u2212" : ""}${PERCENT.format(Math.abs(delta))}%`
30742
31166
  ] }) : null
30743
31167
  ] }) })
30744
31168
  ] }),
30745
- /* @__PURE__ */ jsx88(RegionSwap, { state: stateKey, children: loading ? /* @__PURE__ */ jsx88(Skeleton, { shape: "block", className: Sparkline_default.plotSkeleton }) : /* @__PURE__ */ jsxs68(
31169
+ /* @__PURE__ */ jsx89(RegionSwap, { state: stateKey, children: loading ? /* @__PURE__ */ jsx89(Skeleton, { shape: "block", className: Sparkline_default.plotSkeleton }) : /* @__PURE__ */ jsxs69(
30746
31170
  "div",
30747
31171
  {
30748
31172
  ref: plotRef,
@@ -30779,7 +31203,7 @@ function Sparkline({
30779
31203
  },
30780
31204
  onBlur: () => setActive(null),
30781
31205
  children: [
30782
- geometry.reference !== null ? /* @__PURE__ */ jsx88(
31206
+ geometry.reference !== null ? /* @__PURE__ */ jsx89(
30783
31207
  "span",
30784
31208
  {
30785
31209
  className: Sparkline_default.reference,
@@ -30787,15 +31211,15 @@ function Sparkline({
30787
31211
  "aria-hidden": "true"
30788
31212
  }
30789
31213
  ) : null,
30790
- /* @__PURE__ */ jsx88(RegionSwap, { state: version, fill: true, children: bars ? /* @__PURE__ */ jsxs68("div", { className: Sparkline_default.bars, "aria-hidden": "true", children: [
30791
- /* @__PURE__ */ jsx88(
31214
+ /* @__PURE__ */ jsx89(RegionSwap, { state: version, fill: true, children: bars ? /* @__PURE__ */ jsxs69("div", { className: Sparkline_default.bars, "aria-hidden": "true", children: [
31215
+ /* @__PURE__ */ jsx89(
30792
31216
  "span",
30793
31217
  {
30794
31218
  className: Sparkline_default.baseline,
30795
31219
  style: { "--sparkline-zero": geometry.zero }
30796
31220
  }
30797
31221
  ),
30798
- data.map((p, i) => /* @__PURE__ */ jsx88(
31222
+ data.map((p, i) => /* @__PURE__ */ jsx89(
30799
31223
  "span",
30800
31224
  {
30801
31225
  className: Sparkline_default.slot,
@@ -30803,7 +31227,7 @@ function Sparkline({
30803
31227
  current: i === index || void 0,
30804
31228
  quiet: (active !== null || highlight !== void 0) && i !== index ? true : void 0
30805
31229
  }),
30806
- children: p.value === null ? null : /* @__PURE__ */ jsx88(
31230
+ children: p.value === null ? null : /* @__PURE__ */ jsx89(
30807
31231
  "span",
30808
31232
  {
30809
31233
  className: Sparkline_default.bar,
@@ -30818,7 +31242,7 @@ function Sparkline({
30818
31242
  i
30819
31243
  ))
30820
31244
  ] }) : drawing }),
30821
- point && !bars ? /* @__PURE__ */ jsxs68(
31245
+ point && !bars ? /* @__PURE__ */ jsxs69(
30822
31246
  "span",
30823
31247
  {
30824
31248
  className: Sparkline_default.cursor,
@@ -30829,8 +31253,8 @@ function Sparkline({
30829
31253
  "--sparkline-y": shownValue === null ? 0.5 : y(shownValue)
30830
31254
  },
30831
31255
  children: [
30832
- /* @__PURE__ */ jsx88("span", { className: Sparkline_default.guide }),
30833
- /* @__PURE__ */ jsx88("span", { className: Sparkline_default.dot, "data-empty": shownValue === null || void 0 })
31256
+ /* @__PURE__ */ jsx89("span", { className: Sparkline_default.guide }),
31257
+ /* @__PURE__ */ jsx89("span", { className: Sparkline_default.dot, "data-empty": shownValue === null || void 0 })
30834
31258
  ]
30835
31259
  }
30836
31260
  ) : null
@@ -30839,16 +31263,16 @@ function Sparkline({
30839
31263
  ) }),
30840
31264
  reference !== void 0 ? (
30841
31265
  // Hidden text still feeds `aria-describedby` and is not read twice in the page flow.
30842
- /* @__PURE__ */ jsx88("span", { id: referenceId, hidden: true, children: formatLabel(labels.reference, { value: formatValue(reference) }) })
31266
+ /* @__PURE__ */ jsx89("span", { id: referenceId, hidden: true, children: formatLabel(labels.reference, { value: formatValue(reference) }) })
30843
31267
  ) : null,
30844
- /* @__PURE__ */ jsx88(
31268
+ /* @__PURE__ */ jsx89(
30845
31269
  ChartTooltip,
30846
31270
  {
30847
31271
  anchorRef: plotRef,
30848
31272
  point: tooltipPoint,
30849
31273
  label: point?.label,
30850
31274
  onDismiss: () => setActive(null),
30851
- children: /* @__PURE__ */ jsx88("span", { className: Sparkline_default.tooltipValue, children: valueText })
31275
+ children: /* @__PURE__ */ jsx89("span", { className: Sparkline_default.tooltipValue, children: valueText })
30852
31276
  }
30853
31277
  )
30854
31278
  ]
@@ -30873,7 +31297,7 @@ var Stepper_default = {
30873
31297
  };
30874
31298
 
30875
31299
  // src/components/stepper/Stepper.tsx
30876
- import { jsx as jsx89, jsxs as jsxs69 } from "react/jsx-runtime";
31300
+ import { jsx as jsx90, jsxs as jsxs70 } from "react/jsx-runtime";
30877
31301
  var STEPPER_LABELS = {
30878
31302
  completed: "\u043F\u0440\u043E\u0439\u0434\u0435\u043D",
30879
31303
  danger: "\u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0432\u043D\u0438\u043C\u0430\u043D\u0438\u044F"
@@ -30919,11 +31343,11 @@ function StepperRoot({
30919
31343
  const index = nextIndex;
30920
31344
  nextIndex += 1;
30921
31345
  items.push(
30922
- /* @__PURE__ */ jsx89(StepperIndexContext.Provider, { value: index, children: child }, child.key)
31346
+ /* @__PURE__ */ jsx90(StepperIndexContext.Provider, { value: index, children: child }, child.key)
30923
31347
  );
30924
31348
  }
30925
- return /* @__PURE__ */ jsx89(StepperRootProvider, { value: contextValue, children: tier.provide(
30926
- /* @__PURE__ */ jsx89(
31349
+ return /* @__PURE__ */ jsx90(StepperRootProvider, { value: contextValue, children: tier.provide(
31350
+ /* @__PURE__ */ jsx90(
30927
31351
  "ol",
30928
31352
  {
30929
31353
  role: "list",
@@ -30952,9 +31376,9 @@ function StepperItem({
30952
31376
  const status = statusProp ?? deriveStatus(index, value);
30953
31377
  const itemContext = React94.useMemo(() => ({ index, status }), [index, status]);
30954
31378
  const spokenStatus = status === "completed" ? labels.completed : status === "danger" ? labels.danger : null;
30955
- return /* @__PURE__ */ jsx89(StepperItemProvider, { value: itemContext, children: /* @__PURE__ */ jsxs69("li", { className: Stepper_default.item, children: [
30956
- /* @__PURE__ */ jsx89("span", { className: Stepper_default.separator, "aria-hidden": "true", children: /* @__PURE__ */ jsx89(Icon, { name: "nav.chevronRight", strokeWidth: 2 }) }),
30957
- /* @__PURE__ */ jsxs69(
31379
+ return /* @__PURE__ */ jsx90(StepperItemProvider, { value: itemContext, children: /* @__PURE__ */ jsxs70("li", { className: Stepper_default.item, children: [
31380
+ /* @__PURE__ */ jsx90("span", { className: Stepper_default.separator, "aria-hidden": "true", children: /* @__PURE__ */ jsx90(Icon, { name: "nav.chevronRight", strokeWidth: 2 }) }),
31381
+ /* @__PURE__ */ jsxs70(
30958
31382
  "button",
30959
31383
  {
30960
31384
  ...rest,
@@ -30974,8 +31398,8 @@ function StepperItem({
30974
31398
  },
30975
31399
  children: [
30976
31400
  children,
30977
- spokenStatus === null ? null : /* @__PURE__ */ jsx89(VisuallyHidden, { children: `, ${spokenStatus}` }),
30978
- arrows && orientation === "vertical" ? /* @__PURE__ */ jsx89("span", { className: Stepper_default.arrow, "aria-hidden": "true", children: /* @__PURE__ */ jsx89(Icon, { name: "nav.chevronRight", strokeWidth: 2 }) }) : null
31401
+ spokenStatus === null ? null : /* @__PURE__ */ jsx90(VisuallyHidden, { children: `, ${spokenStatus}` }),
31402
+ arrows && orientation === "vertical" ? /* @__PURE__ */ jsx90("span", { className: Stepper_default.arrow, "aria-hidden": "true", children: /* @__PURE__ */ jsx90(Icon, { name: "nav.chevronRight", strokeWidth: 2 }) }) : null
30979
31403
  ]
30980
31404
  }
30981
31405
  )
@@ -30983,34 +31407,34 @@ function StepperItem({
30983
31407
  }
30984
31408
  StepperItem.displayName = "Stepper.Item";
30985
31409
  function statusGlyph(status, index) {
30986
- if (status === "completed") return /* @__PURE__ */ jsx89(Icon, { name: "action.check", strokeWidth: 2 });
30987
- if (status === "danger") return /* @__PURE__ */ jsx89(Icon, { name: "status.danger" });
31410
+ if (status === "completed") return /* @__PURE__ */ jsx90(Icon, { name: "action.check", strokeWidth: 2 });
31411
+ if (status === "danger") return /* @__PURE__ */ jsx90(Icon, { name: "status.danger" });
30988
31412
  return index + 1;
30989
31413
  }
30990
31414
  function StepperIndicator({ children, className, ...rest }) {
30991
31415
  const { status, index } = useStepperItemContext();
30992
- return /* @__PURE__ */ jsx89(
31416
+ return /* @__PURE__ */ jsx90(
30993
31417
  "span",
30994
31418
  {
30995
31419
  ...rest,
30996
31420
  className: cx(Stepper_default.indicator, className),
30997
31421
  "data-status": status,
30998
31422
  "aria-hidden": "true",
30999
- children: /* @__PURE__ */ jsx89(GlyphSwap, { children: children ?? statusGlyph(status, index) })
31423
+ children: /* @__PURE__ */ jsx90(GlyphSwap, { children: children ?? statusGlyph(status, index) })
31000
31424
  }
31001
31425
  );
31002
31426
  }
31003
31427
  StepperIndicator.displayName = "Stepper.Indicator";
31004
31428
  function StepperContent({ className, ...rest }) {
31005
- return /* @__PURE__ */ jsx89("span", { ...rest, className: cx(Stepper_default.content, className) });
31429
+ return /* @__PURE__ */ jsx90("span", { ...rest, className: cx(Stepper_default.content, className) });
31006
31430
  }
31007
31431
  StepperContent.displayName = "Stepper.Content";
31008
31432
  function StepperTitle({ className, ...rest }) {
31009
- return /* @__PURE__ */ jsx89("span", { ...rest, className: cx(Stepper_default.title, className) });
31433
+ return /* @__PURE__ */ jsx90("span", { ...rest, className: cx(Stepper_default.title, className) });
31010
31434
  }
31011
31435
  StepperTitle.displayName = "Stepper.Title";
31012
31436
  function StepperDescription({ className, ...rest }) {
31013
- return /* @__PURE__ */ jsx89("span", { ...rest, className: cx(Stepper_default.description, className) });
31437
+ return /* @__PURE__ */ jsx90("span", { ...rest, className: cx(Stepper_default.description, className) });
31014
31438
  }
31015
31439
  StepperDescription.displayName = "Stepper.Description";
31016
31440
  var Stepper = {
@@ -31030,7 +31454,7 @@ var Switch_default = {
31030
31454
  };
31031
31455
 
31032
31456
  // src/components/switch/Switch.tsx
31033
- import { Fragment as Fragment45, jsx as jsx90, jsxs as jsxs70 } from "react/jsx-runtime";
31457
+ import { Fragment as Fragment47, jsx as jsx91, jsxs as jsxs71 } from "react/jsx-runtime";
31034
31458
  var SWITCH_LABELS = { optional: "\u043D\u0435\u043E\u0431\u044F\u0437\u0430\u0442\u0435\u043B\u044C\u043D\u043E" };
31035
31459
  function SwitchRoot({
31036
31460
  id,
@@ -31072,7 +31496,7 @@ function SwitchRoot({
31072
31496
  }
31073
31497
  changes.track(next, outcome, { onResolve: () => setStored(next) });
31074
31498
  };
31075
- return /* @__PURE__ */ jsx90(
31499
+ return /* @__PURE__ */ jsx91(
31076
31500
  ChoiceField,
31077
31501
  {
31078
31502
  ids,
@@ -31088,8 +31512,8 @@ function SwitchRoot({
31088
31512
  hintTone,
31089
31513
  error,
31090
31514
  className: cx(Switch_default.root, className),
31091
- control: /* @__PURE__ */ jsxs70(Fragment45, { children: [
31092
- /* @__PURE__ */ jsx90(
31515
+ control: /* @__PURE__ */ jsxs71(Fragment47, { children: [
31516
+ /* @__PURE__ */ jsx91(
31093
31517
  "input",
31094
31518
  {
31095
31519
  ...inputRest,
@@ -31109,13 +31533,13 @@ function SwitchRoot({
31109
31533
  }
31110
31534
  }
31111
31535
  ),
31112
- /* @__PURE__ */ jsx90(
31536
+ /* @__PURE__ */ jsx91(
31113
31537
  "span",
31114
31538
  {
31115
31539
  className: cx(choiceVisualClass, choiceTrackClass, Switch_default.track),
31116
31540
  "data-loading": busy || void 0,
31117
31541
  "aria-hidden": "true",
31118
- children: /* @__PURE__ */ jsx90("span", { className: Switch_default.thumb, children: busy ? /* @__PURE__ */ jsx90(Spinner, { "aria-hidden": "true" }) : null })
31542
+ children: /* @__PURE__ */ jsx91("span", { className: Switch_default.thumb, children: busy ? /* @__PURE__ */ jsx91(Spinner, { "aria-hidden": "true" }) : null })
31119
31543
  }
31120
31544
  )
31121
31545
  ] }),
@@ -31126,7 +31550,7 @@ function SwitchRoot({
31126
31550
  SwitchRoot.displayName = "Switch.Root";
31127
31551
  var takeNext2 = (_current, next) => next;
31128
31552
  function SwitchLabel(props) {
31129
- return /* @__PURE__ */ jsx90(ChoiceLabel, { ...props });
31553
+ return /* @__PURE__ */ jsx91(ChoiceLabel, { ...props });
31130
31554
  }
31131
31555
  SwitchLabel.displayName = "Switch.Label";
31132
31556
  var Switch = {
@@ -31159,7 +31583,7 @@ var Tabs_default = {
31159
31583
  };
31160
31584
 
31161
31585
  // src/components/tabs/Tabs.tsx
31162
- import { Fragment as Fragment46, jsx as jsx91, jsxs as jsxs71 } from "react/jsx-runtime";
31586
+ import { Fragment as Fragment48, jsx as jsx92, jsxs as jsxs72 } from "react/jsx-runtime";
31163
31587
  var TABS_LABELS = {
31164
31588
  remove: "\u0417\u0430\u043A\u0440\u044B\u0442\u044C \u0432\u043A\u043B\u0430\u0434\u043A\u0443 \xAB{label}\xBB"
31165
31589
  };
@@ -31230,14 +31654,14 @@ function TabsRoot({
31230
31654
  ...minItemWidth !== void 0 && { "--tabs-item-min": cssLength(minItemWidth) },
31231
31655
  ...maxItemWidth !== void 0 && { "--tabs-item-max": cssLength(maxItemWidth) }
31232
31656
  };
31233
- return /* @__PURE__ */ jsx91(TabsProvider, { value: context, children: /* @__PURE__ */ jsx91(
31657
+ return /* @__PURE__ */ jsx92(TabsProvider, { value: context, children: /* @__PURE__ */ jsx92(
31234
31658
  "div",
31235
31659
  {
31236
31660
  ...rest,
31237
31661
  className: cx(fieldTierClass, Tabs_default.root, className),
31238
31662
  style: { ...style, ...widths },
31239
31663
  ...toDataAttributes({ orientation, size, tone, "full-width": fullWidth }),
31240
- children: tier.provide(/* @__PURE__ */ jsx91("div", { className: Tabs_default.layout, children }))
31664
+ children: tier.provide(/* @__PURE__ */ jsx92("div", { className: Tabs_default.layout, children }))
31241
31665
  }
31242
31666
  ) });
31243
31667
  }
@@ -31394,7 +31818,7 @@ function TabsList({ children, className, ref, ...rest }) {
31394
31818
  // The strip paints the band; the list inside scrolls and fades over it, the band never fades.
31395
31819
  // A column never scrolls sideways: no edge fade, or it would dim the folder where it joins
31396
31820
  // the panel.
31397
- /* @__PURE__ */ jsx91("div", { className: Tabs_default.strip, children: /* @__PURE__ */ jsxs71(
31821
+ /* @__PURE__ */ jsx92("div", { className: Tabs_default.strip, children: /* @__PURE__ */ jsxs72(
31398
31822
  SwitcherScroller,
31399
31823
  {
31400
31824
  ...rest,
@@ -31406,7 +31830,7 @@ function TabsList({ children, className, ref, ...rest }) {
31406
31830
  "data-collapse": collapse,
31407
31831
  onKeyDown: handleKeyDown,
31408
31832
  children: [
31409
- /* @__PURE__ */ jsx91(
31833
+ /* @__PURE__ */ jsx92(
31410
31834
  "div",
31411
31835
  {
31412
31836
  ref: folderRef,
@@ -31416,7 +31840,7 @@ function TabsList({ children, className, ref, ...rest }) {
31416
31840
  onTransitionEnd: endIndicatorGlide
31417
31841
  }
31418
31842
  ),
31419
- /* @__PURE__ */ jsx91(CollapseContext2.Provider, { value: collapse, children })
31843
+ /* @__PURE__ */ jsx92(CollapseContext2.Provider, { value: collapse, children })
31420
31844
  ]
31421
31845
  }
31422
31846
  ) })
@@ -31496,7 +31920,7 @@ function TabsItem({
31496
31920
  () => setRemoving(false)
31497
31921
  );
31498
31922
  }
31499
- return /* @__PURE__ */ jsxs71(
31923
+ return /* @__PURE__ */ jsxs72(
31500
31924
  "div",
31501
31925
  {
31502
31926
  className: Tabs_default.item,
@@ -31507,8 +31931,8 @@ function TabsItem({
31507
31931
  removable: removable || void 0
31508
31932
  }),
31509
31933
  children: [
31510
- /* @__PURE__ */ jsxs71(Tooltip.Root, { open: iconOnly && tooltipOpen, onOpenChange: setTooltipOpen, children: [
31511
- /* @__PURE__ */ jsx91(Tooltip.Trigger, { children: /* @__PURE__ */ jsx91(
31934
+ /* @__PURE__ */ jsxs72(Tooltip.Root, { open: iconOnly && tooltipOpen, onOpenChange: setTooltipOpen, children: [
31935
+ /* @__PURE__ */ jsx92(Tooltip.Trigger, { children: /* @__PURE__ */ jsx92(
31512
31936
  "button",
31513
31937
  {
31514
31938
  ...rest,
@@ -31549,14 +31973,14 @@ function TabsItem({
31549
31973
  event.preventDefault();
31550
31974
  remove();
31551
31975
  },
31552
- children: /* @__PURE__ */ jsx91("span", { className: cx(Tabs_default.content, press_default.pressPartCompact), children: parts.provide(labelPlainText(children, TabsLabel)) })
31976
+ children: /* @__PURE__ */ jsx92("span", { className: cx(Tabs_default.content, press_default.pressPartCompact), children: parts.provide(labelPlainText(children, TabsLabel)) })
31553
31977
  }
31554
31978
  ) }),
31555
- iconOnly ? /* @__PURE__ */ jsx91(Tooltip.Content, { children: label }) : null
31979
+ iconOnly ? /* @__PURE__ */ jsx92(Tooltip.Content, { children: label }) : null
31556
31980
  ] }),
31557
31981
  removable ? (
31558
31982
  // Out of the tab order: the focused tab closes with Delete; the button is for the pointer.
31559
- /* @__PURE__ */ jsx91("span", { className: Tabs_default.remove, children: /* @__PURE__ */ jsx91(
31983
+ /* @__PURE__ */ jsx92("span", { className: Tabs_default.remove, children: /* @__PURE__ */ jsx92(
31560
31984
  Button.Root,
31561
31985
  {
31562
31986
  variant: "ghost",
@@ -31566,7 +31990,7 @@ function TabsItem({
31566
31990
  loading: removing,
31567
31991
  "aria-label": formatLabel(labels.remove, { label: labelText }),
31568
31992
  onClick: remove,
31569
- children: /* @__PURE__ */ jsx91(Button.Icon, { children: /* @__PURE__ */ jsx91(Icon, { name: "action.close" }) })
31993
+ children: /* @__PURE__ */ jsx92(Button.Icon, { children: /* @__PURE__ */ jsx92(Icon, { name: "action.close" }) })
31570
31994
  }
31571
31995
  ) })
31572
31996
  ) : null
@@ -31576,15 +32000,15 @@ function TabsItem({
31576
32000
  }
31577
32001
  TabsItem.displayName = "Tabs.Item";
31578
32002
  function TabsIcon({ children, className, ...rest }) {
31579
- return /* @__PURE__ */ jsx91("span", { className: cx(iconSlotClass, Tabs_default.icon, className), "aria-hidden": "true", ...rest, children });
32003
+ return /* @__PURE__ */ jsx92("span", { className: cx(iconSlotClass, Tabs_default.icon, className), "aria-hidden": "true", ...rest, children });
31580
32004
  }
31581
32005
  TabsIcon.displayName = "Tabs.Icon";
31582
32006
  function TabsLabel({ children, className, ...rest }) {
31583
32007
  const id = useTextPartId("label");
31584
32008
  const iconOnly = React95.useContext(CollapseContext2) === "icon";
31585
32009
  const text = typeof children === "string" || typeof children === "number" ? String(children) : "";
31586
- return /* @__PURE__ */ jsxs71(Fragment46, { children: [
31587
- /* @__PURE__ */ jsx91(
32010
+ return /* @__PURE__ */ jsxs72(Fragment48, { children: [
32011
+ /* @__PURE__ */ jsx92(
31588
32012
  "span",
31589
32013
  {
31590
32014
  id,
@@ -31592,26 +32016,26 @@ function TabsLabel({ children, className, ...rest }) {
31592
32016
  "data-text": text || void 0,
31593
32017
  "aria-hidden": iconOnly || void 0,
31594
32018
  ...rest,
31595
- children: /* @__PURE__ */ jsx91("span", { className: Tabs_default.labelText, children })
32019
+ children: /* @__PURE__ */ jsx92("span", { className: Tabs_default.labelText, children })
31596
32020
  }
31597
32021
  ),
31598
- iconOnly ? /* @__PURE__ */ jsx91(VisuallyHidden, { children }) : null
32022
+ iconOnly ? /* @__PURE__ */ jsx92(VisuallyHidden, { children }) : null
31599
32023
  ] });
31600
32024
  }
31601
32025
  TabsLabel.displayName = "Tabs.Label";
31602
32026
  function TabsCount({ color = "gray", children, className, ...rest }) {
31603
32027
  const id = useTextPartId("count");
31604
- return /* @__PURE__ */ jsx91(Badge.Root, { ...rest, id, color, className: cx(Tabs_default.count, className), children });
32028
+ return /* @__PURE__ */ jsx92(Badge.Root, { ...rest, id, color, className: cx(Tabs_default.count, className), children });
31605
32029
  }
31606
32030
  TabsCount.displayName = "Tabs.Count";
31607
32031
  function TabsDescription({ children, className, ...rest }) {
31608
32032
  const id = useTextPartId("description");
31609
- return /* @__PURE__ */ jsx91("span", { id, className: cx(Tabs_default.description, className), ...rest, children });
32033
+ return /* @__PURE__ */ jsx92("span", { id, className: cx(Tabs_default.description, className), ...rest, children });
31610
32034
  }
31611
32035
  TabsDescription.displayName = "Tabs.Description";
31612
32036
  function TabsSeparator({ className, ...rest }) {
31613
32037
  const { orientation } = useTabsContext();
31614
- return /* @__PURE__ */ jsx91(
32038
+ return /* @__PURE__ */ jsx92(
31615
32039
  Divider,
31616
32040
  {
31617
32041
  ...rest,
@@ -31623,25 +32047,39 @@ function TabsSeparator({ className, ...rest }) {
31623
32047
  );
31624
32048
  }
31625
32049
  TabsSeparator.displayName = "Tabs.Separator";
31626
- function TabsPanel({ value, ...rest }) {
32050
+ function TabsPanel({ value, keepMounted = false, ...rest }) {
31627
32051
  const { activeValue } = useTabsContext();
31628
- if (activeValue !== value) return null;
31629
- return /* @__PURE__ */ jsx91(TabsPanelContent, { value, ...rest });
32052
+ const active = activeValue === value;
32053
+ const [opened, setOpened] = React95.useState(active);
32054
+ if (active && !opened) setOpened(true);
32055
+ if (!active && !(keepMounted && opened)) return null;
32056
+ return /* @__PURE__ */ jsx92(TabsPanelContent, { value, active, ...rest });
31630
32057
  }
31631
32058
  TabsPanel.displayName = "Tabs.Panel";
31632
- function TabsPanelContent({ value, children, className, ...rest }) {
32059
+ function TabsPanelContent({
32060
+ value,
32061
+ active,
32062
+ children,
32063
+ className,
32064
+ ref,
32065
+ ...rest
32066
+ }) {
31633
32067
  const { rootId, registerPanel } = useTabsContext();
31634
32068
  React95.useLayoutEffect(() => registerPanel(value), [registerPanel, value]);
31635
- return /* @__PURE__ */ jsx91(
32069
+ const appear = useEnterOnAppear(active);
32070
+ const mergedRef = useMergedRefs(appear.ref, ref);
32071
+ return /* @__PURE__ */ jsx92(
31636
32072
  "div",
31637
32073
  {
31638
32074
  ...rest,
32075
+ ref: mergedRef,
31639
32076
  role: "tabpanel",
31640
32077
  id: panelId(rootId, value),
31641
32078
  "aria-labelledby": tabId(rootId, value),
32079
+ hidden: !active || void 0,
31642
32080
  tabIndex: 0,
31643
32081
  className: cx(Tabs_default.panel, className),
31644
- children: /* @__PURE__ */ jsx91("div", { className: cx(Tabs_default.panelContent, enterMotion_default.enterBase), children })
32082
+ children: /* @__PURE__ */ jsx92("div", { className: cx(Tabs_default.panelContent, appear.entering && enterMotion_default.enterBase), children })
31645
32083
  }
31646
32084
  );
31647
32085
  }
@@ -31692,7 +32130,7 @@ var TagSelect_default = {
31692
32130
  };
31693
32131
 
31694
32132
  // src/components/tag-select/TagOptionMenu.tsx
31695
- import { Fragment as Fragment47, jsx as jsx92, jsxs as jsxs72 } from "react/jsx-runtime";
32133
+ import { Fragment as Fragment49, jsx as jsx93, jsxs as jsxs73 } from "react/jsx-runtime";
31696
32134
  var TAG_COLORS = [
31697
32135
  "gray",
31698
32136
  "red",
@@ -31727,8 +32165,8 @@ function TagOptionMenu({
31727
32165
  if (next && next !== label) onUpdate?.(value, { label: next });
31728
32166
  if (!next) setDraft(label);
31729
32167
  };
31730
- return /* @__PURE__ */ jsxs72(Popover.Root, { open, onOpenChange, children: [
31731
- /* @__PURE__ */ jsx92(Popover.Trigger, { children: /* @__PURE__ */ jsx92(
32168
+ return /* @__PURE__ */ jsxs73(Popover.Root, { open, onOpenChange, children: [
32169
+ /* @__PURE__ */ jsx93(Popover.Trigger, { children: /* @__PURE__ */ jsx93(
31732
32170
  Button.Root,
31733
32171
  {
31734
32172
  variant: "ghost",
@@ -31739,11 +32177,11 @@ function TagOptionMenu({
31739
32177
  loading: pending || saving,
31740
32178
  className: TagSelect_default.menuTrigger,
31741
32179
  onMouseDown: (event) => event.preventDefault(),
31742
- children: /* @__PURE__ */ jsx92(Button.Icon, { children: /* @__PURE__ */ jsx92(Icon, { name: "action.more" }) })
32180
+ children: /* @__PURE__ */ jsx93(Button.Icon, { children: /* @__PURE__ */ jsx93(Icon, { name: "action.more" }) })
31743
32181
  }
31744
32182
  ) }),
31745
- /* @__PURE__ */ jsx92(Popover.Content, { size: "s", flush: true, className: TagSelect_default.menuPanel, children: /* @__PURE__ */ jsxs72("div", { className: TagSelect_default.menuBody, children: [
31746
- onUpdate ? /* @__PURE__ */ jsx92(Input.Root, { size: "s", children: /* @__PURE__ */ jsx92(Input.Wrapper, { children: /* @__PURE__ */ jsx92(
32183
+ /* @__PURE__ */ jsx93(Popover.Content, { size: "s", flush: true, className: TagSelect_default.menuPanel, children: /* @__PURE__ */ jsxs73("div", { className: TagSelect_default.menuBody, children: [
32184
+ onUpdate ? /* @__PURE__ */ jsx93(Input.Root, { size: "s", children: /* @__PURE__ */ jsx93(Input.Wrapper, { children: /* @__PURE__ */ jsx93(
31747
32185
  Input.Field,
31748
32186
  {
31749
32187
  autoFocus: true,
@@ -31759,7 +32197,7 @@ function TagOptionMenu({
31759
32197
  }
31760
32198
  }
31761
32199
  ) }) }) : null,
31762
- onDelete ? /* @__PURE__ */ jsxs72(
32200
+ onDelete ? /* @__PURE__ */ jsxs73(
31763
32201
  Button.Root,
31764
32202
  {
31765
32203
  variant: "ghost",
@@ -31771,15 +32209,15 @@ function TagOptionMenu({
31771
32209
  onDelete(value);
31772
32210
  },
31773
32211
  children: [
31774
- /* @__PURE__ */ jsx92(Button.Icon, { children: /* @__PURE__ */ jsx92(Icon, { name: "action.delete" }) }),
32212
+ /* @__PURE__ */ jsx93(Button.Icon, { children: /* @__PURE__ */ jsx93(Icon, { name: "action.delete" }) }),
31775
32213
  labels.delete
31776
32214
  ]
31777
32215
  }
31778
32216
  ) : null,
31779
- onUpdate ? /* @__PURE__ */ jsxs72(Fragment47, { children: [
31780
- /* @__PURE__ */ jsx92(Divider, { className: menu_default.separator }),
31781
- /* @__PURE__ */ jsx92("div", { className: cx(textRole_default.caption, menu_default.groupLabel), children: labels.colors }),
31782
- /* @__PURE__ */ jsx92("div", { className: cx(fieldTierClass, menu_default.tier), "data-size": "s", children: TAG_COLORS.map((hue) => /* @__PURE__ */ jsxs72(
32217
+ onUpdate ? /* @__PURE__ */ jsxs73(Fragment49, { children: [
32218
+ /* @__PURE__ */ jsx93(Divider, { className: menu_default.separator }),
32219
+ /* @__PURE__ */ jsx93("div", { className: cx(textRole_default.caption, menu_default.groupLabel), children: labels.colors }),
32220
+ /* @__PURE__ */ jsx93("div", { className: cx(fieldTierClass, menu_default.tier), "data-size": "s", children: TAG_COLORS.map((hue) => /* @__PURE__ */ jsxs73(
31783
32221
  "button",
31784
32222
  {
31785
32223
  type: "button",
@@ -31787,8 +32225,8 @@ function TagOptionMenu({
31787
32225
  className: cx(menu_default.item, TagSelect_default.colorRow),
31788
32226
  onClick: () => onUpdate(value, { color: hue }),
31789
32227
  children: [
31790
- /* @__PURE__ */ jsx92(Badge.Root, { color: hue, children: labels.colorNames[hue] }),
31791
- /* @__PURE__ */ jsx92("span", { className: cx(menu_default.check, TagSelect_default.colorCheck), "aria-hidden": "true", children: /* @__PURE__ */ jsx92(Icon, { name: "action.check" }) })
32228
+ /* @__PURE__ */ jsx93(Badge.Root, { color: hue, children: labels.colorNames[hue] }),
32229
+ /* @__PURE__ */ jsx93("span", { className: cx(menu_default.check, TagSelect_default.colorCheck), "aria-hidden": "true", children: /* @__PURE__ */ jsx93(Icon, { name: "action.check" }) })
31792
32230
  ]
31793
32231
  },
31794
32232
  hue
@@ -31846,7 +32284,7 @@ function useChipOverflow({
31846
32284
 
31847
32285
  // src/components/tag-select/VirtualOptions.tsx
31848
32286
  import * as React98 from "react";
31849
- import { Fragment as Fragment49, jsx as jsx93, jsxs as jsxs73 } from "react/jsx-runtime";
32287
+ import { Fragment as Fragment51, jsx as jsx94, jsxs as jsxs74 } from "react/jsx-runtime";
31850
32288
  var ONE_GROUP3 = () => 0;
31851
32289
  function VirtualOptions({
31852
32290
  count,
@@ -31896,10 +32334,10 @@ function VirtualOptions({
31896
32334
  [scrollRef, offset, startOf]
31897
32335
  );
31898
32336
  const laid = rowGaps(virtual);
31899
- const spacer = (key, height) => height > 0 ? /* @__PURE__ */ jsx93("div", { className: TagSelect_default.spacer, style: { height }, "aria-hidden": "true" }, key) : null;
31900
- return /* @__PURE__ */ jsxs73(Fragment49, { children: [
31901
- /* @__PURE__ */ jsx93("div", { ref: startRef, "aria-hidden": "true" }),
31902
- laid.rows.map(({ index, gap }) => /* @__PURE__ */ jsxs73(React98.Fragment, { children: [
32337
+ const spacer = (key, height) => height > 0 ? /* @__PURE__ */ jsx94("div", { className: TagSelect_default.spacer, style: { height }, "aria-hidden": "true" }, key) : null;
32338
+ return /* @__PURE__ */ jsxs74(Fragment51, { children: [
32339
+ /* @__PURE__ */ jsx94("div", { ref: startRef, "aria-hidden": "true" }),
32340
+ laid.rows.map(({ index, gap }) => /* @__PURE__ */ jsxs74(React98.Fragment, { children: [
31903
32341
  spacer("gap", gap),
31904
32342
  renderOption(index, virtual.measure(index))
31905
32343
  ] }, getKey(index))),
@@ -31908,7 +32346,7 @@ function VirtualOptions({
31908
32346
  }
31909
32347
 
31910
32348
  // src/components/tag-select/TagSelect.tsx
31911
- import { Fragment as Fragment50, jsx as jsx94, jsxs as jsxs74 } from "react/jsx-runtime";
32349
+ import { Fragment as Fragment52, jsx as jsx95, jsxs as jsxs75 } from "react/jsx-runtime";
31912
32350
  var TAG_SELECT_LABELS = {
31913
32351
  panelHint: "\u0412\u044B\u0431\u0435\u0440\u0438\u0442\u0435 \u0432\u0430\u0440\u0438\u0430\u043D\u0442 \u0438\u043B\u0438 \u0441\u043E\u0437\u0434\u0430\u0439\u0442\u0435 \u043D\u043E\u0432\u044B\u0439",
31914
32352
  create: "\u0421\u043E\u0437\u0434\u0430\u0442\u044C",
@@ -32280,19 +32718,19 @@ function TagSelect({
32280
32718
  const pickOption = () => {
32281
32719
  if (!option.disabled) pick(option.value);
32282
32720
  };
32283
- const content = /* @__PURE__ */ jsxs74(Fragment50, { children: [
32284
- /* @__PURE__ */ jsx94(Checkbox.Indicator, { checked: isSelected, disabled: option.disabled, size: stepDown(size) }),
32285
- /* @__PURE__ */ jsx94(
32721
+ const content = /* @__PURE__ */ jsxs75(Fragment52, { children: [
32722
+ /* @__PURE__ */ jsx95(Checkbox.Indicator, { checked: isSelected, disabled: option.disabled, size: stepDown(size) }),
32723
+ /* @__PURE__ */ jsx95(
32286
32724
  Badge.Root,
32287
32725
  {
32288
32726
  color: option.color ?? fallbackColor,
32289
32727
  disabled: option.disabled,
32290
32728
  className: TagSelect_default.chip,
32291
- children: /* @__PURE__ */ jsx94("span", { className: TagSelect_default.chipLabel, children: option.label })
32729
+ children: /* @__PURE__ */ jsx95("span", { className: TagSelect_default.chipLabel, children: option.label })
32292
32730
  }
32293
32731
  )
32294
32732
  ] });
32295
- return /* @__PURE__ */ jsx94(
32733
+ return /* @__PURE__ */ jsx95(
32296
32734
  OptionRow,
32297
32735
  {
32298
32736
  id: optionDomId(listboxId, option.value),
@@ -32308,8 +32746,8 @@ function TagSelect({
32308
32746
  ref: windowed?.measure,
32309
32747
  posInSet: windowed ? windowed.index + 1 + (showCreate ? 1 : 0) : void 0,
32310
32748
  setSize: windowed ? setSize : void 0,
32311
- children: manageable ? /* @__PURE__ */ jsxs74(Fragment50, { children: [
32312
- /* @__PURE__ */ jsx94(
32749
+ children: manageable ? /* @__PURE__ */ jsxs75(Fragment52, { children: [
32750
+ /* @__PURE__ */ jsx95(
32313
32751
  "button",
32314
32752
  {
32315
32753
  type: "button",
@@ -32323,7 +32761,7 @@ function TagSelect({
32323
32761
  children: content
32324
32762
  }
32325
32763
  ),
32326
- option.disabled ? null : /* @__PURE__ */ jsx94(
32764
+ option.disabled ? null : /* @__PURE__ */ jsx95(
32327
32765
  TagOptionMenu,
32328
32766
  {
32329
32767
  value: option.value,
@@ -32345,7 +32783,7 @@ function TagSelect({
32345
32783
  );
32346
32784
  };
32347
32785
  return tier.provide(
32348
- /* @__PURE__ */ jsxs74(
32786
+ /* @__PURE__ */ jsxs75(
32349
32787
  FieldFrame,
32350
32788
  {
32351
32789
  ...rest,
@@ -32361,7 +32799,7 @@ function TagSelect({
32361
32799
  optionalLabel: labels.optional,
32362
32800
  className,
32363
32801
  children: [
32364
- /* @__PURE__ */ jsxs74(
32802
+ /* @__PURE__ */ jsxs75(
32365
32803
  "div",
32366
32804
  {
32367
32805
  ref: triggerRef,
@@ -32390,7 +32828,7 @@ function TagSelect({
32390
32828
  "focus-ring": focusRing
32391
32829
  }),
32392
32830
  children: [
32393
- /* @__PURE__ */ jsxs74(
32831
+ /* @__PURE__ */ jsxs75(
32394
32832
  ScrollContainer,
32395
32833
  {
32396
32834
  ref: chipsRef,
@@ -32398,7 +32836,7 @@ function TagSelect({
32398
32836
  lock: !expanded,
32399
32837
  className: TagSelect_default.chips,
32400
32838
  children: [
32401
- visibleChips.map((chip, index) => /* @__PURE__ */ jsx94(
32839
+ visibleChips.map((chip, index) => /* @__PURE__ */ jsx95(
32402
32840
  Badge.Root,
32403
32841
  {
32404
32842
  color: chip.color,
@@ -32413,14 +32851,14 @@ function TagSelect({
32413
32851
  onMouseDown: (event) => {
32414
32852
  if (event.target.closest("button")) event.preventDefault();
32415
32853
  },
32416
- children: /* @__PURE__ */ jsx94("span", { className: TagSelect_default.chipLabel, children: chip.label })
32854
+ children: /* @__PURE__ */ jsx95("span", { className: TagSelect_default.chipLabel, children: chip.label })
32417
32855
  },
32418
32856
  chip.value
32419
32857
  )),
32420
32858
  hiddenChips.length > 0 ? (
32421
32859
  // A real button around the chip; the click bubbles to the field, which expands and
32422
32860
  // opens the list.
32423
- /* @__PURE__ */ jsx94(
32861
+ /* @__PURE__ */ jsx95(
32424
32862
  "button",
32425
32863
  {
32426
32864
  type: "button",
@@ -32428,17 +32866,17 @@ function TagSelect({
32428
32866
  disabled,
32429
32867
  title: hiddenChips.map((chip) => chip.label).join(", "),
32430
32868
  onClick: () => inputRef.current?.focus(),
32431
- children: /* @__PURE__ */ jsxs74(Badge.Root, { color: "gray", disabled, className: TagSelect_default.chipMore, children: [
32432
- /* @__PURE__ */ jsxs74("span", { "aria-hidden": "true", children: [
32869
+ children: /* @__PURE__ */ jsxs75(Badge.Root, { color: "gray", disabled, className: TagSelect_default.chipMore, children: [
32870
+ /* @__PURE__ */ jsxs75("span", { "aria-hidden": "true", children: [
32433
32871
  "+",
32434
32872
  hiddenChips.length
32435
32873
  ] }),
32436
- /* @__PURE__ */ jsx94(VisuallyHidden, { children: formatLabel(labels.more, { count: hiddenChips.length }) })
32874
+ /* @__PURE__ */ jsx95(VisuallyHidden, { children: formatLabel(labels.more, { count: hiddenChips.length }) })
32437
32875
  ] })
32438
32876
  }
32439
32877
  )
32440
32878
  ) : null,
32441
- /* @__PURE__ */ jsx94(
32879
+ /* @__PURE__ */ jsx95(
32442
32880
  "input",
32443
32881
  {
32444
32882
  ref: inputRef,
@@ -32476,9 +32914,9 @@ function TagSelect({
32476
32914
  ]
32477
32915
  }
32478
32916
  ),
32479
- name ? selected.map((item) => /* @__PURE__ */ jsx94("input", { type: "hidden", name, value: item, disabled }, item)) : null,
32480
- /* @__PURE__ */ jsx94(VisuallyHidden, { live: "polite", children: announcement }),
32481
- /* @__PURE__ */ jsx94(
32917
+ name ? selected.map((item) => /* @__PURE__ */ jsx95("input", { type: "hidden", name, value: item, disabled }, item)) : null,
32918
+ /* @__PURE__ */ jsx95(VisuallyHidden, { live: "polite", children: announcement }),
32919
+ /* @__PURE__ */ jsx95(
32482
32920
  MeasureRow,
32483
32921
  {
32484
32922
  ref: measureRef,
@@ -32487,11 +32925,11 @@ function TagSelect({
32487
32925
  removeLabel: labels.remove
32488
32926
  }
32489
32927
  ),
32490
- /* @__PURE__ */ jsx94("span", { className: TagSelect_default.chevron, "aria-hidden": "true", children: /* @__PURE__ */ jsx94(Icon, { name: "nav.chevronDown" }) })
32928
+ /* @__PURE__ */ jsx95("span", { className: TagSelect_default.chevron, "aria-hidden": "true", children: /* @__PURE__ */ jsx95(Icon, { name: "nav.chevronDown" }) })
32491
32929
  ]
32492
32930
  }
32493
32931
  ),
32494
- /* @__PURE__ */ jsxs74(
32932
+ /* @__PURE__ */ jsxs75(
32495
32933
  FloatingPanel,
32496
32934
  {
32497
32935
  floating,
@@ -32506,8 +32944,8 @@ function TagSelect({
32506
32944
  ref: scrollerRef,
32507
32945
  className: cx(fieldTierClass, menu_default.tier, menu_default.menu, TagSelect_default.panel),
32508
32946
  children: [
32509
- labels.panelHint ? /* @__PURE__ */ jsx94("div", { className: cx(textRole_default.caption, TagSelect_default.panelHint), children: labels.panelHint }) : null,
32510
- showCreate ? /* @__PURE__ */ jsxs74(
32947
+ labels.panelHint ? /* @__PURE__ */ jsx95("div", { className: cx(textRole_default.caption, TagSelect_default.panelHint), children: labels.panelHint }) : null,
32948
+ showCreate ? /* @__PURE__ */ jsxs75(
32511
32949
  OptionRow,
32512
32950
  {
32513
32951
  id: optionDomId(listboxId, CREATE_VALUE),
@@ -32520,13 +32958,13 @@ function TagSelect({
32520
32958
  managed: false,
32521
32959
  onPick: () => pick(CREATE_VALUE),
32522
32960
  children: [
32523
- /* @__PURE__ */ jsx94("span", { className: TagSelect_default.createIcon, "aria-hidden": "true", children: /* @__PURE__ */ jsx94(Icon, { name: "action.add" }) }),
32524
- /* @__PURE__ */ jsx94("span", { className: TagSelect_default.createLabel, children: labels.create }),
32525
- /* @__PURE__ */ jsx94(Badge.Root, { color: fallbackColor, className: TagSelect_default.chip, children: /* @__PURE__ */ jsx94("span", { className: TagSelect_default.chipLabel, children: inputTrim }) })
32961
+ /* @__PURE__ */ jsx95("span", { className: TagSelect_default.createIcon, "aria-hidden": "true", children: /* @__PURE__ */ jsx95(Icon, { name: "action.add" }) }),
32962
+ /* @__PURE__ */ jsx95("span", { className: TagSelect_default.createLabel, children: labels.create }),
32963
+ /* @__PURE__ */ jsx95(Badge.Root, { color: fallbackColor, className: TagSelect_default.chip, children: /* @__PURE__ */ jsx95("span", { className: TagSelect_default.chipLabel, children: inputTrim }) })
32526
32964
  ]
32527
32965
  }
32528
32966
  ) : null,
32529
- virtualized ? /* @__PURE__ */ jsx94(
32967
+ virtualized ? /* @__PURE__ */ jsx95(
32530
32968
  VirtualOptions,
32531
32969
  {
32532
32970
  ref: virtualRef,
@@ -32599,7 +33037,7 @@ function OptionRow({
32599
33037
  ...toDataAttributes({ value, highlighted, selected, disabled, pending })
32600
33038
  };
32601
33039
  if (managed) {
32602
- return /* @__PURE__ */ jsx94(
33040
+ return /* @__PURE__ */ jsx95(
32603
33041
  "div",
32604
33042
  {
32605
33043
  ...props,
@@ -32609,7 +33047,7 @@ function OptionRow({
32609
33047
  }
32610
33048
  );
32611
33049
  }
32612
- return /* @__PURE__ */ jsx94(
33050
+ return /* @__PURE__ */ jsx95(
32613
33051
  "button",
32614
33052
  {
32615
33053
  type: "button",
@@ -32633,8 +33071,8 @@ var MeasureRow = React99.memo(function MeasureRow2({
32633
33071
  return (
32634
33072
  // The clip keeps the row (wider than the field with many tags) out of the scroll width of
32635
33073
  // every scroller around the field; the row itself keeps its full width to measure.
32636
- /* @__PURE__ */ jsx94("div", { className: TagSelect_default.measureClip, "aria-hidden": true, inert: true, children: /* @__PURE__ */ jsxs74("div", { ref, className: TagSelect_default.measure, children: [
32637
- chips.map((chip) => /* @__PURE__ */ jsx94(
33074
+ /* @__PURE__ */ jsx95("div", { className: TagSelect_default.measureClip, "aria-hidden": true, inert: true, children: /* @__PURE__ */ jsxs75("div", { ref, className: TagSelect_default.measure, children: [
33075
+ chips.map((chip) => /* @__PURE__ */ jsx95(
32638
33076
  Badge.Root,
32639
33077
  {
32640
33078
  color: chip.color,
@@ -32642,11 +33080,11 @@ var MeasureRow = React99.memo(function MeasureRow2({
32642
33080
  className: TagSelect_default.chip,
32643
33081
  labels: { remove: formatLabel(removeLabel, { label: chip.label }) },
32644
33082
  onRemove: noop,
32645
- children: /* @__PURE__ */ jsx94("span", { className: TagSelect_default.chipLabel, children: chip.label })
33083
+ children: /* @__PURE__ */ jsx95("span", { className: TagSelect_default.chipLabel, children: chip.label })
32646
33084
  },
32647
33085
  chip.value
32648
33086
  )),
32649
- /* @__PURE__ */ jsxs74(Badge.Root, { color: "gray", className: TagSelect_default.chipMore, children: [
33087
+ /* @__PURE__ */ jsxs75(Badge.Root, { color: "gray", className: TagSelect_default.chipMore, children: [
32650
33088
  "+",
32651
33089
  Math.max(chips.length, 9)
32652
33090
  ] })
@@ -32681,11 +33119,11 @@ var Timeline_default = {
32681
33119
  };
32682
33120
 
32683
33121
  // src/components/timeline/Timeline.tsx
32684
- import { Fragment as Fragment51, jsx as jsx95, jsxs as jsxs75 } from "react/jsx-runtime";
33122
+ import { Fragment as Fragment53, jsx as jsx96, jsxs as jsxs76 } from "react/jsx-runtime";
32685
33123
  function TimelineRoot({ size: sizeProp, children, className, ...rest }) {
32686
33124
  const tier = useHostTier(sizeProp);
32687
33125
  return tier.provide(
32688
- /* @__PURE__ */ jsx95(
33126
+ /* @__PURE__ */ jsx96(
32689
33127
  "div",
32690
33128
  {
32691
33129
  ...rest,
@@ -32711,7 +33149,7 @@ function TimelineGroup({ label, children, className, ...rest }) {
32711
33149
  const labelId = React100.useId();
32712
33150
  const hasLabel = hasContent(label);
32713
33151
  const events = React100.Children.toArray(children);
32714
- const items = events.map((child, index) => /* @__PURE__ */ jsx95(
33152
+ const items = events.map((child, index) => /* @__PURE__ */ jsx96(
32715
33153
  EdgeContext.Provider,
32716
33154
  {
32717
33155
  value: {
@@ -32724,9 +33162,9 @@ function TimelineGroup({ label, children, className, ...rest }) {
32724
33162
  },
32725
33163
  React100.isValidElement(child) ? child.key : index
32726
33164
  ));
32727
- return /* @__PURE__ */ jsxs75("div", { className: Timeline_default.group, children: [
32728
- hasLabel ? /* @__PURE__ */ jsx95("div", { id: labelId, className: cx(GROUP_LABEL_ROLE[size], Timeline_default.groupLabel), children: label }) : null,
32729
- /* @__PURE__ */ jsx95(
33165
+ return /* @__PURE__ */ jsxs76("div", { className: Timeline_default.group, children: [
33166
+ hasLabel ? /* @__PURE__ */ jsx96("div", { id: labelId, className: cx(GROUP_LABEL_ROLE[size], Timeline_default.groupLabel), children: label }) : null,
33167
+ /* @__PURE__ */ jsx96(
32730
33168
  "ol",
32731
33169
  {
32732
33170
  role: "list",
@@ -32778,21 +33216,21 @@ function TimelineItem({
32778
33216
  interactive: interactive || void 0
32779
33217
  })
32780
33218
  };
32781
- const dot = /* @__PURE__ */ jsx95("span", { className: Timeline_default.dot, "aria-hidden": "true" });
33219
+ const dot = /* @__PURE__ */ jsx96("span", { className: Timeline_default.dot, "aria-hidden": "true" });
32782
33220
  const content = (parts) => {
32783
33221
  const { parts: value, rest: text } = splitParts(parts, TimelineItemValue);
32784
- return /* @__PURE__ */ jsxs75(Fragment51, { children: [
33222
+ return /* @__PURE__ */ jsxs76(Fragment53, { children: [
32785
33223
  dot,
32786
- /* @__PURE__ */ jsx95("span", { className: Timeline_default.text, children: text }),
33224
+ /* @__PURE__ */ jsx96("span", { className: Timeline_default.text, children: text }),
32787
33225
  value
32788
33226
  ] });
32789
33227
  };
32790
33228
  let row;
32791
33229
  if (asChild) {
32792
33230
  const child = slotChild(children, "Timeline.Item");
32793
- row = /* @__PURE__ */ jsx95(InteractiveElement, { ...rowProps, element: "slot", onClick, children: React100.cloneElement(child, void 0, content(child.props.children)) });
33231
+ row = /* @__PURE__ */ jsx96(InteractiveElement, { ...rowProps, element: "slot", onClick, children: React100.cloneElement(child, void 0, content(child.props.children)) });
32794
33232
  } else if (href) {
32795
- row = /* @__PURE__ */ jsx95(
33233
+ row = /* @__PURE__ */ jsx96(
32796
33234
  InteractiveElement,
32797
33235
  {
32798
33236
  ...rowProps,
@@ -32806,21 +33244,21 @@ function TimelineItem({
32806
33244
  }
32807
33245
  );
32808
33246
  } else if (onClick) {
32809
- row = /* @__PURE__ */ jsx95(InteractiveElement, { ...rowProps, element: "button", onClick, children: content(children) });
33247
+ row = /* @__PURE__ */ jsx96(InteractiveElement, { ...rowProps, element: "button", onClick, children: content(children) });
32810
33248
  } else {
32811
- row = /* @__PURE__ */ jsx95(InteractiveElement, { ...rowProps, element: "static", children: content(children) });
33249
+ row = /* @__PURE__ */ jsx96(InteractiveElement, { ...rowProps, element: "static", children: content(children) });
32812
33250
  }
32813
- return /* @__PURE__ */ jsx95("li", { className: Timeline_default.item, ...toDataAttributes(edgeAttributes(edge)), children: row });
33251
+ return /* @__PURE__ */ jsx96("li", { className: Timeline_default.item, ...toDataAttributes(edgeAttributes(edge)), children: row });
32814
33252
  }
32815
33253
  TimelineItem.displayName = "Timeline.Item";
32816
33254
  function TimelineItemTitle({ children, className, ...rest }) {
32817
- return /* @__PURE__ */ jsx95("span", { ...rest, className: cx(Timeline_default.title, className), children });
33255
+ return /* @__PURE__ */ jsx96("span", { ...rest, className: cx(Timeline_default.title, className), children });
32818
33256
  }
32819
33257
  TimelineItemTitle.displayName = "Timeline.ItemTitle";
32820
33258
  var ValueContext = React100.createContext(false);
32821
33259
  function TimelineItemMeta({ children, className, ...rest }) {
32822
33260
  const inValue = React100.useContext(ValueContext);
32823
- return /* @__PURE__ */ jsx95("span", { ...rest, className: cx(inValue ? Timeline_default.valueMeta : Timeline_default.meta, className), children });
33261
+ return /* @__PURE__ */ jsx96("span", { ...rest, className: cx(inValue ? Timeline_default.valueMeta : Timeline_default.meta, className), children });
32824
33262
  }
32825
33263
  TimelineItemMeta.displayName = "Timeline.ItemMeta";
32826
33264
  function TimelineItemValue({
@@ -32829,19 +33267,19 @@ function TimelineItemValue({
32829
33267
  className,
32830
33268
  ...rest
32831
33269
  }) {
32832
- return /* @__PURE__ */ jsx95(
33270
+ return /* @__PURE__ */ jsx96(
32833
33271
  "span",
32834
33272
  {
32835
33273
  ...rest,
32836
33274
  className: cx(Timeline_default.value, textTone_default.tone, className),
32837
33275
  ...toDataAttributes({ tone }),
32838
- children: /* @__PURE__ */ jsx95(ValueContext.Provider, { value: true, children })
33276
+ children: /* @__PURE__ */ jsx96(ValueContext.Provider, { value: true, children })
32839
33277
  }
32840
33278
  );
32841
33279
  }
32842
33280
  TimelineItemValue.displayName = "Timeline.ItemValue";
32843
33281
  function TimelineDescription({ className, ...rest }) {
32844
- return /* @__PURE__ */ jsx95("span", { className: cx(Timeline_default.gapTrailing, className), ...rest });
33282
+ return /* @__PURE__ */ jsx96("span", { className: cx(Timeline_default.gapTrailing, className), ...rest });
32845
33283
  }
32846
33284
  TimelineDescription.displayName = "Timeline.Description";
32847
33285
  function TimelineGap({ tone = "neutral", children, className, ...rest }) {
@@ -32850,9 +33288,9 @@ function TimelineGap({ tone = "neutral", children, className, ...rest }) {
32850
33288
  const caption = parts.filter((child) => !isDescription(child));
32851
33289
  const description = parts.filter(isDescription);
32852
33290
  const edge = React100.useContext(EdgeContext);
32853
- return /* @__PURE__ */ jsx95("li", { className: cx(Timeline_default.item, Timeline_default.gapItem), ...toDataAttributes(edgeAttributes(edge)), children: /* @__PURE__ */ jsxs75("div", { ...rest, className: cx(Timeline_default.gapRow, className), ...toDataAttributes({ tone }), children: [
32854
- /* @__PURE__ */ jsx95("span", { className: Timeline_default.gapDot, "aria-hidden": "true" }),
32855
- /* @__PURE__ */ jsx95("span", { className: Timeline_default.gapCaption, children: caption }),
33291
+ return /* @__PURE__ */ jsx96("li", { className: cx(Timeline_default.item, Timeline_default.gapItem), ...toDataAttributes(edgeAttributes(edge)), children: /* @__PURE__ */ jsxs76("div", { ...rest, className: cx(Timeline_default.gapRow, className), ...toDataAttributes({ tone }), children: [
33292
+ /* @__PURE__ */ jsx96("span", { className: Timeline_default.gapDot, "aria-hidden": "true" }),
33293
+ /* @__PURE__ */ jsx96("span", { className: Timeline_default.gapCaption, children: caption }),
32856
33294
  description
32857
33295
  ] }) });
32858
33296
  }
@@ -32887,7 +33325,7 @@ var VideoNote_default = {
32887
33325
  };
32888
33326
 
32889
33327
  // src/components/video-note/VideoNote.tsx
32890
- import { jsx as jsx96, jsxs as jsxs76 } from "react/jsx-runtime";
33328
+ import { jsx as jsx97, jsxs as jsxs77 } from "react/jsx-runtime";
32891
33329
  var VIDEO_NOTE_LABELS = {
32892
33330
  player: "\u0412\u0438\u0434\u0435\u043E\u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u0435",
32893
33331
  play: "\u0412\u043E\u0441\u043F\u0440\u043E\u0438\u0437\u0432\u0435\u0441\u0442\u0438 \u0432\u0438\u0434\u0435\u043E\u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u0435",
@@ -32920,7 +33358,7 @@ function VideoNoteInner(props) {
32920
33358
  }),
32921
33359
  unplayed ? labels.unplayed : null
32922
33360
  ].filter(Boolean).join(", ");
32923
- return /* @__PURE__ */ jsxs76(
33361
+ return /* @__PURE__ */ jsxs77(
32924
33362
  MediaPlayerRoot,
32925
33363
  {
32926
33364
  label: labels.player,
@@ -32928,7 +33366,7 @@ function VideoNoteInner(props) {
32928
33366
  ...rest,
32929
33367
  className: cx(VideoNote_default.root, className),
32930
33368
  children: [
32931
- /* @__PURE__ */ jsxs76(
33369
+ /* @__PURE__ */ jsxs77(
32932
33370
  "div",
32933
33371
  {
32934
33372
  className: cx(press_default.press, VideoNote_default.circle),
@@ -32938,9 +33376,9 @@ function VideoNoteInner(props) {
32938
33376
  "data-covered": covered || void 0,
32939
33377
  "data-disabled": inactive || void 0,
32940
33378
  children: [
32941
- /* @__PURE__ */ jsxs76("span", { className: VideoNote_default.media, "aria-hidden": "true", children: [
32942
- placeholder.mounted ? /* @__PURE__ */ jsx96(Skeleton, { shape: "block", className: VideoNote_default.fill }) : null,
32943
- /* @__PURE__ */ jsx96(
33379
+ /* @__PURE__ */ jsxs77("span", { className: VideoNote_default.media, "aria-hidden": "true", children: [
33380
+ placeholder.mounted ? /* @__PURE__ */ jsx97(Skeleton, { shape: "block", className: VideoNote_default.fill }) : null,
33381
+ /* @__PURE__ */ jsx97(
32944
33382
  "video",
32945
33383
  {
32946
33384
  ref: videoRef,
@@ -32956,8 +33394,8 @@ function VideoNoteInner(props) {
32956
33394
  }
32957
33395
  )
32958
33396
  ] }),
32959
- /* @__PURE__ */ jsx96(Ring, { ref: ringRef, value: 0, live: true, track: "none", weight: "band", className: VideoNote_default.ring }),
32960
- /* @__PURE__ */ jsx96(
33397
+ /* @__PURE__ */ jsx97(Ring, { ref: ringRef, value: 0, live: true, track: "none", weight: "band", className: VideoNote_default.ring }),
33398
+ /* @__PURE__ */ jsx97(
32961
33399
  "span",
32962
33400
  {
32963
33401
  className: VideoNote_default.hit,
@@ -32966,7 +33404,7 @@ function VideoNoteInner(props) {
32966
33404
  onClick: inactive ? void 0 : player.toggle
32967
33405
  }
32968
33406
  ),
32969
- /* @__PURE__ */ jsx96("span", { className: VideoNote_default.play, "data-badge": "play", "data-shown": state !== "playing", children: /* @__PURE__ */ jsx96(
33407
+ /* @__PURE__ */ jsx97("span", { className: VideoNote_default.play, "data-badge": "play", "data-shown": state !== "playing", children: /* @__PURE__ */ jsx97(
32970
33408
  PlayDisk,
32971
33409
  {
32972
33410
  look: "shade",
@@ -32980,8 +33418,8 @@ function VideoNoteInner(props) {
32980
33418
  describedBy: description ? descriptionId : void 0
32981
33419
  }
32982
33420
  ) }),
32983
- description ? /* @__PURE__ */ jsx96(VisuallyHidden, { id: descriptionId, children: description }) : null,
32984
- shown !== null ? /* @__PURE__ */ jsxs76(
33421
+ description ? /* @__PURE__ */ jsx97(VisuallyHidden, { id: descriptionId, children: description }) : null,
33422
+ shown !== null ? /* @__PURE__ */ jsxs77(
32985
33423
  "span",
32986
33424
  {
32987
33425
  className: cx(textRole_default.caption, mediaPill_default.pill, VideoNote_default.duration),
@@ -32989,11 +33427,11 @@ function VideoNoteInner(props) {
32989
33427
  "aria-hidden": "true",
32990
33428
  children: [
32991
33429
  formatClock(shown),
32992
- /* @__PURE__ */ jsx96(UnplayedDot, { shown: unplayed })
33430
+ /* @__PURE__ */ jsx97(UnplayedDot, { shown: unplayed })
32993
33431
  ]
32994
33432
  }
32995
33433
  ) : null,
32996
- transcript ? /* @__PURE__ */ jsx96(
33434
+ transcript ? /* @__PURE__ */ jsx97(
32997
33435
  TranscriptButton,
32998
33436
  {
32999
33437
  transcript,
@@ -33011,7 +33449,7 @@ function VideoNoteInner(props) {
33011
33449
  );
33012
33450
  }
33013
33451
  function VideoNote(props) {
33014
- return /* @__PURE__ */ jsx96(VideoNoteInner, { ...props }, props.src);
33452
+ return /* @__PURE__ */ jsx97(VideoNoteInner, { ...props }, props.src);
33015
33453
  }
33016
33454
  defineMessagePart(VideoNote, {
33017
33455
  shell: "round",
@@ -33082,7 +33520,7 @@ async function getWaveform(source, bars = WAVEFORM_BARS) {
33082
33520
  }
33083
33521
 
33084
33522
  // src/components/voice-player/VoicePlayer.tsx
33085
- import { jsx as jsx97, jsxs as jsxs77 } from "react/jsx-runtime";
33523
+ import { jsx as jsx98, jsxs as jsxs78 } from "react/jsx-runtime";
33086
33524
  var RATES = [1, 1.5, 2];
33087
33525
  var VOICE_PLAYER_LABELS = {
33088
33526
  player: "\u0413\u043E\u043B\u043E\u0441\u043E\u0432\u043E\u0435 \u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u0435",
@@ -33120,7 +33558,7 @@ function Bars({
33120
33558
  className,
33121
33559
  ref
33122
33560
  }) {
33123
- return /* @__PURE__ */ jsx97("span", { ref, className: cx(VoicePlayer_default.bars, className), "aria-hidden": "true", children: levels.map((level, i) => /* @__PURE__ */ jsx97(
33561
+ return /* @__PURE__ */ jsx98("span", { ref, className: cx(VoicePlayer_default.bars, className), "aria-hidden": "true", children: levels.map((level, i) => /* @__PURE__ */ jsx98(
33124
33562
  "span",
33125
33563
  {
33126
33564
  className: VoicePlayer_default.bar,
@@ -33188,7 +33626,7 @@ function VoicePlayer(props) {
33188
33626
  const shownTime = showElapsed ? position : total;
33189
33627
  const rateText = formatRate(rate);
33190
33628
  const open = transcript?.expanded ?? false;
33191
- return /* @__PURE__ */ jsxs77(
33629
+ return /* @__PURE__ */ jsxs78(
33192
33630
  MediaPlayerRoot,
33193
33631
  {
33194
33632
  label: labels.player,
@@ -33196,7 +33634,7 @@ function VoicePlayer(props) {
33196
33634
  ...rest,
33197
33635
  className: cx(VoicePlayer_default.root, className),
33198
33636
  children: [
33199
- /* @__PURE__ */ jsx97(
33637
+ /* @__PURE__ */ jsx98(
33200
33638
  "audio",
33201
33639
  {
33202
33640
  ref: audioRef,
@@ -33206,8 +33644,8 @@ function VoicePlayer(props) {
33206
33644
  ...player.mediaEvents
33207
33645
  }
33208
33646
  ),
33209
- /* @__PURE__ */ jsxs77("div", { className: VoicePlayer_default.row, children: [
33210
- /* @__PURE__ */ jsx97(
33647
+ /* @__PURE__ */ jsxs78("div", { className: VoicePlayer_default.row, children: [
33648
+ /* @__PURE__ */ jsx98(
33211
33649
  PlayDisk,
33212
33650
  {
33213
33651
  look: "solid",
@@ -33219,9 +33657,9 @@ function VoicePlayer(props) {
33219
33657
  onToggle: player.toggle
33220
33658
  }
33221
33659
  ),
33222
- /* @__PURE__ */ jsxs77("div", { className: VoicePlayer_default.body, children: [
33223
- /* @__PURE__ */ jsxs77("div", { className: VoicePlayer_default.waveLine, children: [
33224
- /* @__PURE__ */ jsxs77(
33660
+ /* @__PURE__ */ jsxs78("div", { className: VoicePlayer_default.body, children: [
33661
+ /* @__PURE__ */ jsxs78("div", { className: VoicePlayer_default.waveLine, children: [
33662
+ /* @__PURE__ */ jsxs78(
33225
33663
  "div",
33226
33664
  {
33227
33665
  ref: waveRef,
@@ -33244,12 +33682,12 @@ function VoicePlayer(props) {
33244
33682
  onLostPointerCapture: endDrag,
33245
33683
  onKeyDown: player.seekWithKey,
33246
33684
  children: [
33247
- /* @__PURE__ */ jsx97(Bars, { levels: bars }),
33248
- /* @__PURE__ */ jsx97(Bars, { ref: playedRef, levels: bars, className: VoicePlayer_default.played })
33685
+ /* @__PURE__ */ jsx98(Bars, { levels: bars }),
33686
+ /* @__PURE__ */ jsx98(Bars, { ref: playedRef, levels: bars, className: VoicePlayer_default.played })
33249
33687
  ]
33250
33688
  }
33251
33689
  ),
33252
- transcript ? /* @__PURE__ */ jsx97(
33690
+ transcript ? /* @__PURE__ */ jsx98(
33253
33691
  TranscriptButton,
33254
33692
  {
33255
33693
  transcript,
@@ -33258,11 +33696,11 @@ function VoicePlayer(props) {
33258
33696
  }
33259
33697
  ) : null
33260
33698
  ] }),
33261
- /* @__PURE__ */ jsxs77("div", { className: cx(textRole_default.caption, VoicePlayer_default.meta), children: [
33262
- /* @__PURE__ */ jsx97("span", { className: VoicePlayer_default.time, "aria-hidden": "true", children: formatClock(shownTime) }),
33263
- /* @__PURE__ */ jsx97(UnplayedDot, { shown: unplayed }),
33264
- unplayed ? /* @__PURE__ */ jsx97(VisuallyHidden, { children: labels.unplayed }) : null,
33265
- /* @__PURE__ */ jsx97(
33699
+ /* @__PURE__ */ jsxs78("div", { className: cx(textRole_default.caption, VoicePlayer_default.meta), children: [
33700
+ /* @__PURE__ */ jsx98("span", { className: VoicePlayer_default.time, "aria-hidden": "true", children: formatClock(shownTime) }),
33701
+ /* @__PURE__ */ jsx98(UnplayedDot, { shown: unplayed }),
33702
+ unplayed ? /* @__PURE__ */ jsx98(VisuallyHidden, { children: labels.unplayed }) : null,
33703
+ /* @__PURE__ */ jsx98(
33266
33704
  Button.Root,
33267
33705
  {
33268
33706
  variant: "soft",