@tensor_1/react 2.47.0 → 2.48.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 (183) hide show
  1. package/README.md +470 -1
  2. package/dist/{SchedulingCalendar-B6TakO2h.d.ts → SchedulingCalendar-WWyFL3Eo.d.ts} +51 -2
  3. package/dist/announce.d.ts +10 -0
  4. package/dist/announce.js +30 -0
  5. package/dist/chart-analytic.cjs +33 -25
  6. package/dist/chart-preset.cjs +23 -15
  7. package/dist/chart.cjs +23 -15
  8. package/dist/combobox-model.d.ts +10 -1
  9. package/dist/combobox-model.js +15 -0
  10. package/dist/command-palette-model.d.ts +44 -0
  11. package/dist/command-palette-model.js +36 -0
  12. package/dist/components/AccountMenu.d.ts +44 -0
  13. package/dist/components/AccountMenu.js +43 -0
  14. package/dist/components/AppShell.d.ts +45 -2
  15. package/dist/components/AppShell.js +116 -5
  16. package/dist/components/AuditLog.d.ts +128 -0
  17. package/dist/components/AuditLog.js +196 -0
  18. package/dist/components/BrandProfiles.js +4 -3
  19. package/dist/components/Breadcrumbs.d.ts +9 -2
  20. package/dist/components/Breadcrumbs.js +3 -2
  21. package/dist/components/Button.d.ts +12 -5
  22. package/dist/components/Button.js +7 -3
  23. package/dist/components/Card.d.ts +18 -1
  24. package/dist/components/Card.js +5 -1
  25. package/dist/components/ChangeHighlight.d.ts +30 -0
  26. package/dist/components/ChangeHighlight.js +21 -0
  27. package/dist/components/ChartCore.js +2 -1
  28. package/dist/components/Checkbox.d.ts +27 -1
  29. package/dist/components/Checkbox.js +31 -2
  30. package/dist/components/CodeDisplay.d.ts +65 -0
  31. package/dist/components/CodeDisplay.js +124 -0
  32. package/dist/components/Combobox.d.ts +27 -6
  33. package/dist/components/Combobox.js +195 -58
  34. package/dist/components/CommandPalette.d.ts +36 -1
  35. package/dist/components/CommandPalette.js +254 -2
  36. package/dist/components/ContactCard.d.ts +66 -0
  37. package/dist/components/ContactCard.js +74 -0
  38. package/dist/components/Count.d.ts +24 -0
  39. package/dist/components/Count.js +32 -0
  40. package/dist/components/DataWorkspace.d.ts +167 -0
  41. package/dist/components/DataWorkspace.js +383 -0
  42. package/dist/components/DateFieldParts.d.ts +2 -1
  43. package/dist/components/DateFieldParts.js +7 -0
  44. package/dist/components/DatePicker.d.ts +9 -2
  45. package/dist/components/DatePicker.js +67 -28
  46. package/dist/components/DateRangePicker.d.ts +12 -2
  47. package/dist/components/DateRangePicker.js +13 -12
  48. package/dist/components/DetailPage.d.ts +7 -1
  49. package/dist/components/DetailPage.js +2 -1
  50. package/dist/components/Dialogs.d.ts +71 -10
  51. package/dist/components/Dialogs.js +130 -30
  52. package/dist/components/DiffViewer.d.ts +23 -3
  53. package/dist/components/DiffViewer.js +26 -12
  54. package/dist/components/DiscardPrompt.js +16 -0
  55. package/dist/components/DisplayPreferences.d.ts +83 -0
  56. package/dist/components/DisplayPreferences.js +185 -0
  57. package/dist/components/EditorialHome.d.ts +23 -3
  58. package/dist/components/EditorialHome.js +16 -11
  59. package/dist/components/EntityPicker.d.ts +20 -3
  60. package/dist/components/EntityPicker.js +32 -13
  61. package/dist/components/FilterEditor.d.ts +18 -4
  62. package/dist/components/FilterEditor.js +141 -19
  63. package/dist/components/InfoTip.js +11 -12
  64. package/dist/components/InlineEdit.d.ts +87 -20
  65. package/dist/components/InlineEdit.js +197 -54
  66. package/dist/components/Input.d.ts +12 -2
  67. package/dist/components/Input.js +5 -3
  68. package/dist/components/Kbd.d.ts +6 -1
  69. package/dist/components/Kbd.js +6 -6
  70. package/dist/components/Lightbox.d.ts +41 -5
  71. package/dist/components/Lightbox.js +95 -9
  72. package/dist/components/MatchReview.d.ts +40 -1
  73. package/dist/components/MatchReview.js +130 -4
  74. package/dist/components/MetricInput.js +3 -2
  75. package/dist/components/Modal.d.ts +2 -1
  76. package/dist/components/Modal.js +13 -4
  77. package/dist/components/NavFavourites.d.ts +5 -0
  78. package/dist/components/NavFavourites.js +7 -7
  79. package/dist/components/OtpInput.d.ts +33 -0
  80. package/dist/components/OtpInput.js +123 -0
  81. package/dist/components/PageHeader.d.ts +7 -1
  82. package/dist/components/PageHeader.js +2 -2
  83. package/dist/components/Pagination.js +6 -5
  84. package/dist/components/PasswordInput.d.ts +34 -0
  85. package/dist/components/PasswordInput.js +101 -0
  86. package/dist/components/Peek.js +3 -3
  87. package/dist/components/Popover.js +2 -0
  88. package/dist/components/PrintLayout.d.ts +63 -0
  89. package/dist/components/PrintLayout.js +114 -0
  90. package/dist/components/QrCode.d.ts +47 -0
  91. package/dist/components/QrCode.js +55 -0
  92. package/dist/components/QrScanner.d.ts +95 -0
  93. package/dist/components/QrScanner.js +266 -0
  94. package/dist/components/RelationshipGraph.d.ts +32 -1
  95. package/dist/components/RelationshipGraph.js +18 -5
  96. package/dist/components/RelationshipGraphLayered.d.ts +1 -1
  97. package/dist/components/RelationshipGraphLayered.js +190 -115
  98. package/dist/components/RelationshipGraphList.js +33 -6
  99. package/dist/components/RuleBuilder.js +39 -7
  100. package/dist/components/SchedulingAgenda.d.ts +3 -1
  101. package/dist/components/SchedulingCalendar.d.ts +3 -1
  102. package/dist/components/SchedulingCalendar.js +43 -4
  103. package/dist/components/SchedulingResourceDay.d.ts +57 -0
  104. package/dist/components/SchedulingResourceDay.js +287 -0
  105. package/dist/components/SchedulingTimeGrid.d.ts +3 -1
  106. package/dist/components/SchedulingTimeline.d.ts +3 -1
  107. package/dist/components/SearchSuggest.d.ts +23 -3
  108. package/dist/components/SearchSuggest.js +48 -17
  109. package/dist/components/Segmented.d.ts +39 -4
  110. package/dist/components/Segmented.js +31 -3
  111. package/dist/components/Select.d.ts +3 -2
  112. package/dist/components/Select.js +1 -1
  113. package/dist/components/ShortcutHint.d.ts +11 -10
  114. package/dist/components/ShortcutHint.js +44 -38
  115. package/dist/components/Sidebar.d.ts +36 -4
  116. package/dist/components/Sidebar.js +37 -12
  117. package/dist/components/SortableList.d.ts +45 -0
  118. package/dist/components/SortableList.js +134 -0
  119. package/dist/components/Stat.d.ts +28 -3
  120. package/dist/components/Stat.js +13 -3
  121. package/dist/components/StatusPill.d.ts +14 -3
  122. package/dist/components/StatusPill.js +11 -3
  123. package/dist/components/Steps.js +2 -1
  124. package/dist/components/Table.d.ts +9 -2
  125. package/dist/components/Table.js +4 -2
  126. package/dist/components/TableControls.js +18 -58
  127. package/dist/components/TableOverflowProbe.d.ts +12 -0
  128. package/dist/components/TableOverflowProbe.js +27 -0
  129. package/dist/components/Tabs.d.ts +2 -1
  130. package/dist/components/Tabs.js +1 -0
  131. package/dist/components/TagInput.d.ts +67 -0
  132. package/dist/components/TagInput.js +342 -0
  133. package/dist/components/Textarea.d.ts +5 -0
  134. package/dist/components/Textarea.js +2 -2
  135. package/dist/components/TimePicker.d.ts +80 -0
  136. package/dist/components/TimePicker.js +347 -0
  137. package/dist/components/Toast.js +3 -2
  138. package/dist/components/Tooltip.d.ts +8 -4
  139. package/dist/components/Tooltip.js +24 -21
  140. package/dist/components/Tree.d.ts +8 -0
  141. package/dist/components/Tree.js +11 -5
  142. package/dist/display-preferences-model.d.ts +53 -0
  143. package/dist/display-preferences-model.js +64 -0
  144. package/dist/emoji.cjs +28 -35
  145. package/dist/filter-model.d.ts +59 -3
  146. package/dist/filter-model.js +67 -2
  147. package/dist/hooks/useChangeHighlight.d.ts +33 -0
  148. package/dist/hooks/useChangeHighlight.js +44 -0
  149. package/dist/hooks/useDialog.d.ts +5 -0
  150. package/dist/hooks/useDialog.js +3 -2
  151. package/dist/hooks/useOptimisticValue.d.ts +51 -0
  152. package/dist/hooks/useOptimisticValue.js +61 -0
  153. package/dist/hooks/useReducedMotion.d.ts +4 -1
  154. package/dist/hooks/useReducedMotion.js +7 -1
  155. package/dist/hooks/useResolvedFilterLabels.d.ts +15 -0
  156. package/dist/hooks/useResolvedFilterLabels.js +34 -0
  157. package/dist/hooks/useVirtualRows.d.ts +21 -2
  158. package/dist/hooks/useVirtualRows.js +30 -3
  159. package/dist/icons/Icon.d.ts +1 -1
  160. package/dist/index.cjs +18644 -13210
  161. package/dist/index.d.cts +3003 -699
  162. package/dist/index.d.ts +42 -16
  163. package/dist/index.js +139 -7
  164. package/dist/labels-context.d.ts +90 -3
  165. package/dist/overlay-stack.d.ts +6 -0
  166. package/dist/overlay-stack.js +13 -0
  167. package/dist/qr-model.d.ts +65 -0
  168. package/dist/qr-model.js +323 -0
  169. package/dist/relationship-graph-model.d.ts +78 -3
  170. package/dist/relationship-graph-model.js +112 -5
  171. package/dist/reorder.d.ts +30 -0
  172. package/dist/reorder.js +74 -0
  173. package/dist/rich-text.cjs +4 -2
  174. package/dist/scheduling-resource-model.d.ts +76 -0
  175. package/dist/scheduling-resource-model.js +74 -0
  176. package/dist/search-suggest-model.js +3 -1
  177. package/dist/shell-context.d.ts +11 -0
  178. package/dist/shell-context.js +7 -0
  179. package/dist/time-field-model.d.ts +46 -0
  180. package/dist/time-field-model.js +152 -0
  181. package/dist/toast-store.d.ts +17 -1
  182. package/dist/toast-store.js +23 -7
  183. package/package.json +2 -1
@@ -1,10 +1,11 @@
1
1
  "use client";
2
2
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
3
3
  import { useCallback, useEffect, useId, useMemo, useRef, useState } from "react";
4
- import { boundRelationshipGraph, layeredNeighbor, layoutLayeredGraph } from "../relationship-graph-model.js";
4
+ import { boundRelationshipGraph, edgeLabelSize, layeredNeighbor, layoutLayeredGraph, separateEdgeLabels } from "../relationship-graph-model.js";
5
5
  import { cx } from "../cx.js";
6
6
  import { Maximize2Icon, Minimize2Icon, MinusIcon, PlusIcon, RotateCcwIcon, ScanIcon } from "../icons/components.js";
7
7
  import { useKbdPlatform } from "./Kbd.js";
8
+ import { prefersReducedMotion } from "../hooks/useReducedMotion.js";
8
9
  import { EquivalentRelationshipList } from "./RelationshipGraphList.js";
9
10
  import { Tooltip } from "./Tooltip.js";
10
11
  const EMPTY_IDS = /* @__PURE__ */ new Set();
@@ -14,6 +15,7 @@ const READABLE_ZOOM = 0.75;
14
15
  const ZOOM_STEP = 1.2;
15
16
  const PAN_STEP = 64;
16
17
  const FOCUS_MARGIN = 24;
18
+ const DESCRIBED_RELATIONS = 5;
17
19
  const HINT_MS = 1600;
18
20
  const NAV_KEYS = ["ArrowUp", "ArrowDown", "ArrowLeft", "ArrowRight", "Home", "End"];
19
21
  const clampZoom = (zoom) => Math.min(MAX_ZOOM, Math.max(MIN_ZOOM, zoom));
@@ -60,9 +62,12 @@ function LayeredRelationshipGraph({
60
62
  focusId,
61
63
  onFocusChange,
62
64
  controls = "full",
63
- initialView: initialViewMode = "readable"
65
+ initialView: initialViewMode = "readable",
66
+ revealId,
67
+ markRoot
64
68
  }) {
65
69
  const hintId = useId();
70
+ const describeId = useId();
66
71
  const viewportHintId = useId();
67
72
  const compact = controls === "compact";
68
73
  const bounded = useMemo(() => boundRelationshipGraph(nodes, edges, maxNodes), [nodes, edges, maxNodes]);
@@ -85,11 +90,13 @@ function LayeredRelationshipGraph({
85
90
  const viewportRef = useRef(null);
86
91
  const itemRefs = useRef(/* @__PURE__ */ new Map());
87
92
  const fullscreenButtonRef = useRef(null);
93
+ const footerRef = useRef(null);
88
94
  const [size, setSize] = useState({ width: 0, height: 0 });
89
95
  const [view, setView] = useState({ x: 0, y: 0, zoom: 1 });
90
96
  const [animate, setAnimate] = useState(false);
91
97
  const [localFocus, setLocalFocus] = useState(void 0);
92
98
  const [hoverId, setHoverId] = useState(void 0);
99
+ const [focusWithinId, setFocusWithinId] = useState(void 0);
93
100
  const [fullscreen, setFullscreen] = useState(false);
94
101
  const [wheelHint, setWheelHint] = useState(false);
95
102
  const viewRef = useRef(view);
@@ -147,7 +154,7 @@ function LayeredRelationshipGraph({
147
154
  }, [fullscreen]);
148
155
  useEffect(() => () => clearTimeout(hintTimer.current), []);
149
156
  const moveView = useCallback((next, smooth) => {
150
- setAnimate(smooth);
157
+ setAnimate(smooth && !prefersReducedMotion());
151
158
  setView(next);
152
159
  }, []);
153
160
  const ensureVisible = useCallback((id, smooth) => {
@@ -165,8 +172,10 @@ function LayeredRelationshipGraph({
165
172
  let nextY = y;
166
173
  if (left < FOCUS_MARGIN) nextX += FOCUS_MARGIN - left;
167
174
  else if (right > width - FOCUS_MARGIN) nextX -= right - (width - FOCUS_MARGIN);
175
+ const footer = footerRef.current;
176
+ const bottomMargin = footer ? Math.max(FOCUS_MARGIN, heightPx - footer.offsetTop + 8) : FOCUS_MARGIN;
168
177
  if (top < FOCUS_MARGIN) nextY += FOCUS_MARGIN - top;
169
- else if (bottom > heightPx - FOCUS_MARGIN) nextY -= bottom - (heightPx - FOCUS_MARGIN);
178
+ else if (bottom > heightPx - bottomMargin) nextY -= bottom - (heightPx - bottomMargin);
170
179
  if (nextX !== x || nextY !== y) moveView({ x: nextX, y: nextY, zoom }, smooth);
171
180
  }, [moveView]);
172
181
  const focusItem = useCallback((id) => {
@@ -197,6 +206,18 @@ function LayeredRelationshipGraph({
197
206
  ensureVisible(controlledTarget, true);
198
207
  });
199
208
  }, [controlledKey, controlledTarget, controlledPresent, ensureVisible]);
209
+ const revealTarget = revealId !== void 0 ? layout.itemOf[revealId] ?? revealId : void 0;
210
+ const revealReady = revealTarget !== void 0 && itemById.has(revealTarget) && size.width > 0;
211
+ const revealedKey = useRef(void 0);
212
+ useEffect(() => {
213
+ if (!revealReady || revealTarget === void 0 || initialisedFor.current === void 0) return;
214
+ if (revealedKey.current === revealTarget) return;
215
+ revealedKey.current = revealTarget;
216
+ requestAnimationFrame(() => ensureVisible(revealTarget, true));
217
+ }, [revealReady, revealTarget, ensureVisible]);
218
+ useEffect(() => {
219
+ if (revealId === void 0) revealedKey.current = void 0;
220
+ }, [revealId]);
200
221
  useEffect(() => {
201
222
  const element = viewportRef.current;
202
223
  if (!element) return;
@@ -331,10 +352,34 @@ function LayeredRelationshipGraph({
331
352
  if (nodeAriaLabel) return [nodeAriaLabel(node), item.inCycle ? labels.cycle : void 0, conflict].filter(Boolean).join(", ");
332
353
  return [node.label, node.type, node.description, labels.relationships(item.degree), item.inCycle ? labels.cycle : void 0, conflict].filter(Boolean).join(", ");
333
354
  };
355
+ const nodeLabelById = useMemo(() => new Map(bounded.nodes.map((node) => [node.id, node.label])), [bounded.nodes]);
356
+ const relationsOf = useMemo(() => {
357
+ const map = /* @__PURE__ */ new Map();
358
+ const add = (id, text) => {
359
+ const list = map.get(id);
360
+ if (list) list.push(text);
361
+ else map.set(id, [text]);
362
+ };
363
+ for (const edge of bounded.edges) {
364
+ if (!nodeLabelById.has(edge.source) || !nodeLabelById.has(edge.target) || edge.source === edge.target) continue;
365
+ const relation = edge.label ?? edge.type ?? labels.relationship;
366
+ const note = edge.description ? ` (${edge.description})` : "";
367
+ add(edge.source, `${labels.relationTo(relation, nodeLabelById.get(edge.target))}${note}`);
368
+ add(edge.target, `${labels.relationFrom(relation, nodeLabelById.get(edge.source))}${note}`);
369
+ }
370
+ const described = /* @__PURE__ */ new Map();
371
+ for (const [id, list] of map) {
372
+ const hidden = list.length - DESCRIBED_RELATIONS;
373
+ described.set(id, hidden > 0 ? `${list.slice(0, DESCRIBED_RELATIONS).join("; ")}; ${labels.moreRelations(hidden, showList)}` : list.join("; "));
374
+ }
375
+ return described;
376
+ }, [bounded.edges, nodeLabelById, labels, showList]);
377
+ const showRoot = markRoot ?? rootId !== void 0;
334
378
  const showLabel = (edge) => {
335
379
  if (edgeLabels === "never" || edge.label === void 0) return false;
336
380
  if (edgeLabels === "always") return true;
337
- return edge.autoLabel || activeIds.has(edge.source) || activeIds.has(edge.target) || focusedId === edge.source || focusedId === edge.target;
381
+ if (edge.columnLabel) return false;
382
+ return edge.autoLabel || activeIds.has(edge.source) || activeIds.has(edge.target) || focusWithinId === edge.source || focusWithinId === edge.target;
338
383
  };
339
384
  const viewportStyle = height !== void 0 ? { "--uix-relationship-graph-height": height } : {};
340
385
  const stageStyle = {
@@ -343,6 +388,141 @@ function LayeredRelationshipGraph({
343
388
  transform: `translate(${view.x}px, ${view.y}px) scale(${view.zoom})`
344
389
  };
345
390
  const zoomPercent = Math.round(view.zoom * 100);
391
+ const labelPlacement = useMemo(() => separateEdgeLabels(layout.edges.filter(showLabel).map((edge) => {
392
+ const lines = edge.kind === "cycle" ? [...edge.labelLines, labels.cycle] : edge.labelLines;
393
+ return { id: edge.id, x: edge.labelX, y: edge.labelY, ...edgeLabelSize(lines) };
394
+ })), [layout, edgeLabels, activeIds, focusWithinId, labels]);
395
+ const live = useRef({ activate, onItemKeyDown, onFocusChange, toggleCluster, onSelect });
396
+ live.current = { activate, onItemKeyDown, onFocusChange, toggleCluster, onSelect };
397
+ const edgeLayer = useMemo(() => /* @__PURE__ */ jsx("svg", { className: "uix-relationship-graph__edges", width: layout.width, height: layout.height, "aria-hidden": "true", focusable: "false", children: layout.edges.map((edge) => ({ edge, active: activeIds.has(edge.source) || activeIds.has(edge.target) || edge.edgeIds.some((id) => highlightedEdgeIds.has(id)) })).sort((a, b) => Number(a.active) - Number(b.active)).map(({ edge, active }) => {
398
+ const angle = edge.arrowAngle * 180 / Math.PI;
399
+ const placed = labelPlacement.get(edge.id);
400
+ return /* @__PURE__ */ jsxs(
401
+ "g",
402
+ {
403
+ className: "uix-relationship-graph__link",
404
+ "data-kind": edge.kind,
405
+ "data-bus": edge.bus || void 0,
406
+ "data-active": active || void 0,
407
+ "data-emphasis": edge.emphasis || void 0,
408
+ "data-conflicted": edge.edgeIds.some((id) => conflictedEdgeIds.has(id)) || void 0,
409
+ "data-dimmed": dimmedNodeIds.has(edge.source) && dimmedNodeIds.has(edge.target) || void 0,
410
+ "data-variant": edge.variant === "dashed" ? "dashed" : void 0,
411
+ "data-tone": edge.tone,
412
+ children: [
413
+ /* @__PURE__ */ jsx("path", { d: edge.path }),
414
+ edge.arrow !== "none" && /* @__PURE__ */ jsx("polygon", { points: arrowPoints, transform: `translate(${edge.arrowX} ${edge.arrowY}) rotate(${angle})` }),
415
+ placed && !placed.hidden && /* @__PURE__ */ jsx("text", { x: placed.x, y: placed.y, textAnchor: "middle", dominantBaseline: "middle", "data-moved": placed.y !== edge.labelY || void 0, children: (edge.kind === "cycle" ? [...edge.labelLines, labels.cycle] : edge.labelLines).map((line, index, lines) => /* @__PURE__ */ jsx("tspan", { x: placed.x, dy: index === 0 ? `${-(lines.length - 1) * 0.55}em` : "1.1em", children: line }, index)) })
416
+ ]
417
+ },
418
+ edge.id
419
+ );
420
+ }) }), [layout, activeIds, highlightedEdgeIds, conflictedEdgeIds, dimmedNodeIds, labelPlacement, labels]);
421
+ const itemLayer = useMemo(() => /* @__PURE__ */ jsxs(Fragment, { children: [
422
+ layout.columns.map((column) => /* @__PURE__ */ jsxs(
423
+ "div",
424
+ {
425
+ className: "uix-relationship-graph__column",
426
+ "aria-hidden": "true",
427
+ style: { left: column.x, width: layout.nodeWidth + 64 },
428
+ children: [
429
+ labels.column(column.depth, column.count),
430
+ column.edgeLabel !== void 0 && /* @__PURE__ */ jsxs(Fragment, { children: [
431
+ " \xB7 ",
432
+ column.edgeLabel
433
+ ] })
434
+ ]
435
+ },
436
+ column.depth
437
+ )),
438
+ /* @__PURE__ */ jsx("div", { role: "group", "aria-roledescription": labels.roleDescription, "aria-label": labels.graphSummary(bounded.nodes.length, bounded.edges.length), "aria-describedby": hintId, children: layout.items.map((item, itemIndex) => {
439
+ const selected = item.id === selectedItemId;
440
+ const relations = item.node ? relationsOf.get(item.node.id) : void 0;
441
+ const dimmed = item.node ? dimmedNodeIds.has(item.node.id) : item.cluster.members.every((member) => dimmedNodeIds.has(member.id));
442
+ const body = item.cluster ? renderCluster?.(item.cluster) ?? /* @__PURE__ */ jsxs(Fragment, { children: [
443
+ /* @__PURE__ */ jsx("span", { className: "uix-relationship-graph__item-label", children: labels.cluster(item.cluster.members.length, item.cluster.type, item.cluster.edgeLabel) }),
444
+ /* @__PURE__ */ jsx("span", { className: "uix-relationship-graph__item-meta", children: labels.expandCluster })
445
+ ] }) : renderNode?.(item.node, { selected, dimmed }) ?? /* @__PURE__ */ jsxs(Fragment, { children: [
446
+ /* @__PURE__ */ jsx("span", { className: "uix-relationship-graph__item-label", children: item.node.label }),
447
+ (item.node.type || item.node.description) && /* @__PURE__ */ jsx("span", { className: "uix-relationship-graph__item-meta", children: [item.node.type, item.node.description].filter(Boolean).join(" \xB7 ") })
448
+ ] });
449
+ return /* @__PURE__ */ jsxs(
450
+ "button",
451
+ {
452
+ ref: (element) => {
453
+ if (element) itemRefs.current.set(item.id, element);
454
+ else itemRefs.current.delete(item.id);
455
+ },
456
+ type: "button",
457
+ className: "uix-relationship-graph__item",
458
+ "data-kind": item.kind,
459
+ "data-node-id": item.id,
460
+ "data-selected": selected || void 0,
461
+ "data-dimmed": dimmed || void 0,
462
+ "data-highlighted": item.node && highlightedNodeIds.has(item.node.id) || void 0,
463
+ "data-conflicted": item.node && conflictedNodeIds.has(item.node.id) || void 0,
464
+ "data-root": showRoot && item.id === rootItemId || void 0,
465
+ "data-tone": item.node?.tone,
466
+ "data-flag": item.inCycle || void 0,
467
+ style: { left: item.x, top: item.y, width: item.width, height: item.height },
468
+ tabIndex: item.id === focusedId ? 0 : -1,
469
+ "aria-label": labelFor(item),
470
+ "aria-describedby": relations ? `${describeId}-${itemIndex}` : void 0,
471
+ ...item.cluster ? { "aria-expanded": false } : { "aria-pressed": selected },
472
+ onClick: () => live.current.activate(item),
473
+ onKeyDown: (event) => live.current.onItemKeyDown(event, item),
474
+ onFocus: () => {
475
+ setFocusWithinId(item.id);
476
+ if (item.id === focusedId) return;
477
+ setLocalFocus(item.id);
478
+ live.current.onFocusChange?.(item.id);
479
+ },
480
+ onBlur: () => setFocusWithinId((current) => current === item.id ? void 0 : current),
481
+ onPointerEnter: () => setHoverId(item.id),
482
+ onPointerLeave: () => setHoverId((current) => current === item.id ? void 0 : current),
483
+ children: [
484
+ body,
485
+ item.inCycle && /* @__PURE__ */ jsx("span", { className: "uix-relationship-graph__item-flag", "aria-hidden": "true", children: labels.cycle })
486
+ ]
487
+ },
488
+ item.id
489
+ );
490
+ }) }),
491
+ /* @__PURE__ */ jsx("div", { hidden: true, children: layout.items.map((item, itemIndex) => {
492
+ const relations = item.node ? relationsOf.get(item.node.id) : void 0;
493
+ return relations ? /* @__PURE__ */ jsx("span", { id: `${describeId}-${itemIndex}`, children: relations }, item.id) : null;
494
+ }) }),
495
+ layout.items.filter((item) => item.expandedGroup).map((item) => {
496
+ const group = item.expandedGroup;
497
+ return /* @__PURE__ */ jsx(
498
+ "button",
499
+ {
500
+ type: "button",
501
+ className: "uix-relationship-graph__collapse",
502
+ "aria-expanded": "true",
503
+ style: { left: item.x, top: item.y - 26, width: item.width },
504
+ onClick: () => live.current.toggleCluster(group.id, group.id),
505
+ children: labels.collapseCluster(group.members.length, group.type)
506
+ },
507
+ `collapse:${group.id}`
508
+ );
509
+ })
510
+ ] }), [layout, labels, selectedItemId, focusedId, relationsOf, dimmedNodeIds, highlightedNodeIds, conflictedNodeIds, showRoot, rootItemId, describeId, hintId, bounded, renderNode, renderCluster, nodeAriaLabel]);
511
+ const listLayer = useMemo(() => showList && /* @__PURE__ */ jsx(
512
+ EquivalentRelationshipList,
513
+ {
514
+ nodes: bounded.nodes,
515
+ edges: bounded.edges,
516
+ selectedId,
517
+ labels,
518
+ onSelect: (id) => {
519
+ const node = bounded.nodes.find((candidate) => candidate.id === id);
520
+ if (node) live.current.onSelect?.(node);
521
+ },
522
+ onExpandNeighbors,
523
+ onOpenDetails
524
+ }
525
+ ), [showList, bounded, selectedId, labels, onExpandNeighbors, onOpenDetails]);
346
526
  const control = (label, icon, onClick, { disabled = false, keys, ref } = {}) => /* @__PURE__ */ jsx(Tooltip, { label, placement: "top", ...keys ? { shortcut: keys } : {}, children: /* @__PURE__ */ jsx("button", { ref, type: "button", className: "uix-relationship-graph__control", "aria-label": label, onClick, disabled, children: icon }) });
347
527
  return /* @__PURE__ */ jsxs(
348
528
  "section",
@@ -390,103 +570,12 @@ function LayeredRelationshipGraph({
390
570
  } : {},
391
571
  children: [
392
572
  /* @__PURE__ */ jsxs("div", { className: "uix-relationship-graph__stage", style: stageStyle, "data-animate": animate || void 0, onTransitionEnd: () => setAnimate(false), children: [
393
- /* @__PURE__ */ jsx("svg", { className: "uix-relationship-graph__edges", width: layout.width, height: layout.height, "aria-hidden": "true", focusable: "false", children: layout.edges.map((edge) => {
394
- const active = activeIds.has(edge.source) || activeIds.has(edge.target) || edge.edgeIds.some((id) => highlightedEdgeIds.has(id));
395
- const angle = edge.arrowAngle * 180 / Math.PI;
396
- return /* @__PURE__ */ jsxs(
397
- "g",
398
- {
399
- className: "uix-relationship-graph__link",
400
- "data-kind": edge.kind,
401
- "data-active": active || void 0,
402
- "data-emphasis": edge.emphasis || void 0,
403
- "data-conflicted": edge.edgeIds.some((id) => conflictedEdgeIds.has(id)) || void 0,
404
- "data-dimmed": dimmedNodeIds.has(edge.source) && dimmedNodeIds.has(edge.target) || void 0,
405
- children: [
406
- /* @__PURE__ */ jsx("path", { d: edge.path }),
407
- edge.arrow !== "none" && /* @__PURE__ */ jsx("polygon", { points: arrowPoints, transform: `translate(${edge.arrowX} ${edge.arrowY}) rotate(${angle})` }),
408
- showLabel(edge) && /* @__PURE__ */ jsx("text", { x: edge.labelX, y: edge.labelY, textAnchor: "middle", dominantBaseline: "middle", children: (edge.kind === "cycle" ? [...edge.labelLines, labels.cycle] : edge.labelLines).map((line, index, lines) => /* @__PURE__ */ jsx("tspan", { x: edge.labelX, dy: index === 0 ? `${-(lines.length - 1) * 0.55}em` : "1.1em", children: line }, index)) })
409
- ]
410
- },
411
- edge.id
412
- );
413
- }) }),
414
- layout.columns.map((column) => /* @__PURE__ */ jsx(
415
- "div",
416
- {
417
- className: "uix-relationship-graph__column",
418
- "aria-hidden": "true",
419
- style: { left: column.x, width: layout.nodeWidth },
420
- children: labels.column(column.depth, column.count)
421
- },
422
- column.depth
423
- )),
424
- /* @__PURE__ */ jsx("div", { role: "group", "aria-roledescription": labels.roleDescription, "aria-label": labels.graphSummary(bounded.nodes.length, bounded.edges.length), "aria-describedby": hintId, children: layout.items.map((item) => {
425
- const selected = item.id === selectedItemId;
426
- const dimmed = item.node ? dimmedNodeIds.has(item.node.id) : item.cluster.members.every((member) => dimmedNodeIds.has(member.id));
427
- const body = item.cluster ? renderCluster?.(item.cluster) ?? /* @__PURE__ */ jsxs(Fragment, { children: [
428
- /* @__PURE__ */ jsx("span", { className: "uix-relationship-graph__item-label", children: labels.cluster(item.cluster.members.length, item.cluster.type, item.cluster.edgeLabel) }),
429
- /* @__PURE__ */ jsx("span", { className: "uix-relationship-graph__item-meta", children: labels.expandCluster })
430
- ] }) : renderNode?.(item.node, { selected, dimmed }) ?? /* @__PURE__ */ jsxs(Fragment, { children: [
431
- /* @__PURE__ */ jsx("span", { className: "uix-relationship-graph__item-label", children: item.node.label }),
432
- (item.node.type || item.node.description) && /* @__PURE__ */ jsx("span", { className: "uix-relationship-graph__item-meta", children: [item.node.type, item.node.description].filter(Boolean).join(" \xB7 ") })
433
- ] });
434
- return /* @__PURE__ */ jsxs(
435
- "button",
436
- {
437
- ref: (element) => {
438
- if (element) itemRefs.current.set(item.id, element);
439
- else itemRefs.current.delete(item.id);
440
- },
441
- type: "button",
442
- className: "uix-relationship-graph__item",
443
- "data-kind": item.kind,
444
- "data-node-id": item.id,
445
- "data-selected": selected || void 0,
446
- "data-dimmed": dimmed || void 0,
447
- "data-highlighted": item.node && highlightedNodeIds.has(item.node.id) || void 0,
448
- "data-conflicted": item.node && conflictedNodeIds.has(item.node.id) || void 0,
449
- "data-root": item.id === rootItemId || void 0,
450
- style: { left: item.x, top: item.y, width: item.width, height: item.height },
451
- tabIndex: item.id === focusedId ? 0 : -1,
452
- "aria-label": labelFor(item),
453
- ...item.cluster ? { "aria-expanded": false } : { "aria-pressed": selected },
454
- onClick: () => activate(item),
455
- onKeyDown: (event) => onItemKeyDown(event, item),
456
- onFocus: () => {
457
- if (item.id === focusedId) return;
458
- setLocalFocus(item.id);
459
- onFocusChange?.(item.id);
460
- },
461
- onPointerEnter: () => setHoverId(item.id),
462
- onPointerLeave: () => setHoverId((current) => current === item.id ? void 0 : current),
463
- children: [
464
- body,
465
- item.inCycle && /* @__PURE__ */ jsx("span", { className: "uix-relationship-graph__item-flag", "aria-hidden": "true", children: labels.cycle })
466
- ]
467
- },
468
- item.id
469
- );
470
- }) }),
471
- layout.items.filter((item) => item.expandedGroup).map((item) => {
472
- const group = item.expandedGroup;
473
- return /* @__PURE__ */ jsx(
474
- "button",
475
- {
476
- type: "button",
477
- className: "uix-relationship-graph__collapse",
478
- "aria-expanded": "true",
479
- style: { left: item.x, top: item.y - 26, width: item.width },
480
- onClick: () => toggleCluster(group.id, group.id),
481
- children: labels.collapseCluster(group.members.length, group.type)
482
- },
483
- `collapse:${group.id}`
484
- );
485
- })
573
+ edgeLayer,
574
+ itemLayer
486
575
  ] }),
487
576
  compact && /* @__PURE__ */ jsxs(Fragment, { children: [
488
577
  wheelHint && /* @__PURE__ */ jsx("p", { className: "uix-relationship-graph__toast", role: "status", children: labels.navigationHint(modifier) }),
489
- /* @__PURE__ */ jsxs("div", { className: "uix-relationship-graph__footer", children: [
578
+ /* @__PURE__ */ jsxs("div", { ref: footerRef, className: "uix-relationship-graph__footer", children: [
490
579
  /* @__PURE__ */ jsx("p", { className: "uix-relationship-graph__hint", "aria-hidden": "true", children: labels.navigationHint(modifier) }),
491
580
  /* @__PURE__ */ jsxs("div", { className: "uix-relationship-graph__controls", role: "group", "aria-label": labels.controls, children: [
492
581
  /* @__PURE__ */ jsx("span", { className: "uix-relationship-graph__zoom-level", "aria-live": "polite", children: labels.zoomLevel(zoomPercent) }),
@@ -508,22 +597,8 @@ function LayeredRelationshipGraph({
508
597
  ]
509
598
  }
510
599
  ),
511
- legend.length > 0 && /* @__PURE__ */ jsx("ul", { className: "uix-relationship-graph__legend", "aria-label": labels.legend, children: legend.map((entry) => /* @__PURE__ */ jsx("li", { "data-type": entry.id, children: entry.label }, entry.id)) }),
512
- showList && /* @__PURE__ */ jsx(
513
- EquivalentRelationshipList,
514
- {
515
- nodes: bounded.nodes,
516
- edges: bounded.edges,
517
- selectedId,
518
- labels,
519
- onSelect: (id) => {
520
- const node = bounded.nodes.find((candidate) => candidate.id === id);
521
- if (node) onSelect?.(node);
522
- },
523
- onExpandNeighbors,
524
- onOpenDetails
525
- }
526
- )
600
+ legend.length > 0 && /* @__PURE__ */ jsx("ul", { className: "uix-relationship-graph__legend", "aria-label": labels.legend, children: legend.map((entry) => /* @__PURE__ */ jsx("li", { "data-type": entry.id, "data-tone": entry.tone, "data-shape": entry.shape, "data-variant": entry.variant, children: entry.label }, entry.id)) }),
601
+ listLayer
527
602
  ]
528
603
  }
529
604
  );
@@ -1,5 +1,7 @@
1
1
  import { jsx, jsxs } from "react/jsx-runtime";
2
+ import { useId, useState } from "react";
2
3
  import { relationshipNeighbors } from "../relationship-graph-model.js";
4
+ const LISTED_NEIGHBOURS = 8;
3
5
  function EquivalentRelationshipList({
4
6
  nodes,
5
7
  edges,
@@ -9,16 +11,41 @@ function EquivalentRelationshipList({
9
11
  onExpandNeighbors,
10
12
  onOpenDetails
11
13
  }) {
14
+ const id = useId();
15
+ const [open, setOpen] = useState(() => /* @__PURE__ */ new Set());
12
16
  const labelById = new Map(nodes.map((node) => [node.id, node.label]));
13
17
  return /* @__PURE__ */ jsxs("div", { className: "uix-relationship-graph__list", role: "region", "aria-label": labels.list, children: [
14
18
  /* @__PURE__ */ jsx("h3", { children: labels.listHeading }),
15
- /* @__PURE__ */ jsx("ul", { children: nodes.map((node) => {
16
- const neighbors = relationshipNeighbors(node.id, edges).map((id) => labelById.get(id) ?? id);
19
+ /* @__PURE__ */ jsx("ul", { children: nodes.map((node, index) => {
20
+ const neighbors = relationshipNeighbors(node.id, edges).map((neighbor) => labelById.get(neighbor) ?? neighbor);
21
+ const all = open.has(node.id);
22
+ const shown = all ? neighbors : neighbors.slice(0, LISTED_NEIGHBOURS);
23
+ const headingId = `${id}-${index}`;
17
24
  return /* @__PURE__ */ jsxs("li", { "data-selected": selectedId === node.id || void 0, children: [
18
- /* @__PURE__ */ jsxs("button", { type: "button", onClick: () => onSelect(node.id), "aria-pressed": selectedId === node.id, children: [
19
- /* @__PURE__ */ jsx("strong", { children: node.label }),
20
- node.type && /* @__PURE__ */ jsx("span", { children: node.type }),
21
- /* @__PURE__ */ jsx("span", { children: neighbors.length ? labels.connectedTo(neighbors.join(", ")) : labels.noConnections })
25
+ /* @__PURE__ */ jsxs("div", { className: "uix-relationship-graph__list-main", children: [
26
+ /* @__PURE__ */ jsxs("button", { type: "button", onClick: () => onSelect(node.id), "aria-pressed": selectedId === node.id, children: [
27
+ /* @__PURE__ */ jsx("strong", { children: node.label }),
28
+ node.type && /* @__PURE__ */ jsx("span", { children: node.type })
29
+ ] }),
30
+ neighbors.length === 0 ? /* @__PURE__ */ jsx("p", { className: "uix-relationship-graph__list-none", children: labels.noConnections }) : /* @__PURE__ */ jsxs("div", { className: "uix-relationship-graph__list-relations", children: [
31
+ /* @__PURE__ */ jsx("span", { id: headingId, children: labels.connectedHeading }),
32
+ /* @__PURE__ */ jsx("ul", { "aria-labelledby": headingId, children: shown.map((name, at) => /* @__PURE__ */ jsx("li", { children: name }, at)) }),
33
+ neighbors.length > LISTED_NEIGHBOURS && /* @__PURE__ */ jsx(
34
+ "button",
35
+ {
36
+ type: "button",
37
+ className: "uix-btn uix-btn--link uix-relationship-graph__list-more",
38
+ "aria-expanded": all,
39
+ onClick: () => setOpen((previous) => {
40
+ const next = new Set(previous);
41
+ if (all) next.delete(node.id);
42
+ else next.add(node.id);
43
+ return next;
44
+ }),
45
+ children: all ? labels.showFewerRelations : labels.showAllRelations(neighbors.length)
46
+ }
47
+ )
48
+ ] })
22
49
  ] }),
23
50
  /* @__PURE__ */ jsxs("span", { className: "uix-relationship-graph__list-actions", children: [
24
51
  onExpandNeighbors && /* @__PURE__ */ jsx("button", { type: "button", onClick: () => onExpandNeighbors(node), children: labels.expandNeighbors }),
@@ -13,6 +13,7 @@ import {
13
13
  } from "../rule-builder-model.js";
14
14
  import { fillLabel } from "../fill-label.js";
15
15
  import { useUixLabels } from "../labels-context.js";
16
+ import { Select } from "./Select.js";
16
17
  const DEFAULT_RULE_BUILDER_LABELS = {
17
18
  region: "Rule builder",
18
19
  summary: "Rule summary",
@@ -94,10 +95,16 @@ function RuleGroupEditor({ group, depth, root, fields, operators, maxDepth, disa
94
95
  combinator === "or" ? labels.any : labels.all
95
96
  ] }) : /* @__PURE__ */ jsxs("label", { children: [
96
97
  labels.match,
97
- /* @__PURE__ */ jsxs("select", { className: "uix-select uix-select--sm", value: group.combinator, disabled, onChange: (event) => updateNode(group.id, (node) => ({ ...node, combinator: event.currentTarget.value })), children: [
98
- /* @__PURE__ */ jsx("option", { value: "and", children: labels.all }),
99
- /* @__PURE__ */ jsx("option", { value: "or", children: labels.any })
100
- ] })
98
+ /* @__PURE__ */ jsx(
99
+ Select,
100
+ {
101
+ size: "sm",
102
+ value: group.combinator,
103
+ disabled,
104
+ options: [{ value: "and", label: labels.all }, { value: "or", label: labels.any }],
105
+ onValueChange: (next) => updateNode(group.id, (node) => ({ ...node, combinator: next }))
106
+ }
107
+ )
101
108
  ] }))
102
109
  ] }),
103
110
  /* @__PURE__ */ jsx("div", { className: "uix-rule-builder__rows", children: group.conditions.map((node, index) => isRuleGroup(node) ? /* @__PURE__ */ jsxs("div", { className: "uix-rule-builder__nested", children: [
@@ -134,11 +141,27 @@ function ConditionRow({ labels, condition, fields, operators, disabled, onChange
134
141
  return /* @__PURE__ */ jsxs("div", { className: "uix-rule-builder__condition", children: [
135
142
  /* @__PURE__ */ jsxs("label", { children: [
136
143
  /* @__PURE__ */ jsx("span", { className: "uix-visually-hidden", children: labels.field }),
137
- /* @__PURE__ */ jsx("select", { className: "uix-select", value: condition.field, onChange: (event) => setField(event.currentTarget.value), disabled, children: fields.map((item) => /* @__PURE__ */ jsx("option", { value: item.id, children: item.label }, item.id)) })
144
+ /* @__PURE__ */ jsx(
145
+ Select,
146
+ {
147
+ value: condition.field,
148
+ disabled,
149
+ options: fields.map((item) => ({ value: item.id, label: item.label })),
150
+ onValueChange: (next) => setField(next)
151
+ }
152
+ )
138
153
  ] }),
139
154
  /* @__PURE__ */ jsxs("label", { children: [
140
155
  /* @__PURE__ */ jsx("span", { className: "uix-visually-hidden", children: labels.operator }),
141
- /* @__PURE__ */ jsx("select", { className: "uix-select", value: condition.operator, onChange: (event) => onChange({ ...condition, operator: event.currentTarget.value }), disabled, children: availableOperators.map((item) => /* @__PURE__ */ jsx("option", { value: item.id, children: item.label }, item.id)) })
156
+ /* @__PURE__ */ jsx(
157
+ Select,
158
+ {
159
+ value: condition.operator,
160
+ disabled,
161
+ options: availableOperators.map((item) => ({ value: item.id, label: item.label })),
162
+ onValueChange: (next) => onChange({ ...condition, operator: next })
163
+ }
164
+ )
142
165
  ] }),
143
166
  operator?.requiresValue !== false && /* @__PURE__ */ jsx("div", { className: "uix-rule-builder__value", children: field?.renderValueEditor?.({ condition, onChange: (value) => onChange({ ...condition, value }), disabled }) ?? /* @__PURE__ */ jsx("input", { className: "uix-input", value: typeof condition.value === "string" || typeof condition.value === "number" ? condition.value : condition.value == null ? "" : JSON.stringify(condition.value), onChange: (event) => onChange({ ...condition, value: event.currentTarget.value }), disabled, "aria-label": fillLabel(labels.valueFor, { field: field?.label ?? labels.itemCondition }) }) }),
144
167
  controls
@@ -243,7 +266,16 @@ function RuleBuilder({
243
266
  value.then.map((action, index) => {
244
267
  const definition = actions.find((item) => item.id === action.type);
245
268
  return /* @__PURE__ */ jsxs("div", { className: "uix-rule-builder__action", children: [
246
- /* @__PURE__ */ jsx("select", { className: "uix-select", value: action.type, disabled, onChange: (event) => updateActions(value.then.map((item) => item.id === action.id ? { ...item, type: event.currentTarget.value } : item)), "aria-label": labels.actionType, children: actions.map((item) => /* @__PURE__ */ jsx("option", { value: item.id, children: item.label }, item.id)) }),
269
+ /* @__PURE__ */ jsx(
270
+ Select,
271
+ {
272
+ value: action.type,
273
+ disabled,
274
+ "aria-label": labels.actionType,
275
+ options: actions.map((item) => ({ value: item.id, label: item.label })),
276
+ onValueChange: (next) => updateActions(value.then.map((item) => item.id === action.id ? { ...item, type: next } : item))
277
+ }
278
+ ),
247
279
  definition?.renderParameters?.(action, (parameters) => updateActions(value.then.map((item) => item.id === action.id ? { ...item, parameters } : item)), disabled),
248
280
  !disabled && /* @__PURE__ */ jsx(
249
281
  RowControls,
@@ -1,8 +1,10 @@
1
1
  import * as react from 'react';
2
2
  import { ReactNode } from 'react';
3
- import { S as SchedulingAgendaGroup, e as SchedulingCalendarLabels, i as SchedulingDatePart, d as SchedulingCalendarEntry, l as SchedulingMarker, f as SchedulingCalendarOverlay } from '../SchedulingCalendar-B6TakO2h.js';
3
+ import { S as SchedulingAgendaGroup, e as SchedulingCalendarLabels, i as SchedulingDatePart, d as SchedulingCalendarEntry, l as SchedulingMarker, f as SchedulingCalendarOverlay } from '../SchedulingCalendar-WWyFL3Eo.js';
4
4
  import '../calendar-model.js';
5
5
  import '../scheduling-calendar-model.js';
6
+ import './SchedulingResourceDay.js';
7
+ import '../scheduling-resource-model.js';
6
8
 
7
9
  /** The height of one row of the virtualised agenda, in px. The stylesheet uses the same number. */
8
10
  declare const AGENDA_VIRTUAL_ROW = 44;
@@ -1,4 +1,6 @@
1
1
  import 'react';
2
2
  import '../calendar-model.js';
3
3
  import '../scheduling-calendar-model.js';
4
- export { D as DEFAULT_SCHEDULING_CALENDAR_LABELS, S as SchedulingAgendaGroup, a as SchedulingBand, b as SchedulingCalendar, c as SchedulingCalendarDay, d as SchedulingCalendarEntry, e as SchedulingCalendarLabels, f as SchedulingCalendarOverlay, g as SchedulingCalendarProps, h as SchedulingCalendarView, i as SchedulingDatePart, j as SchedulingEntryState, k as SchedulingLegendItem, l as SchedulingMarker, m as SchedulingMarkerEmphasis, n as SchedulingOverlayKind, o as SchedulingOverlayPattern, p as SchedulingStatus } from '../SchedulingCalendar-B6TakO2h.js';
4
+ import './SchedulingResourceDay.js';
5
+ import '../scheduling-resource-model.js';
6
+ export { D as DEFAULT_SCHEDULING_CALENDAR_LABELS, S as SchedulingAgendaGroup, a as SchedulingBand, b as SchedulingCalendar, c as SchedulingCalendarDay, d as SchedulingCalendarEntry, e as SchedulingCalendarLabels, f as SchedulingCalendarOverlay, g as SchedulingCalendarProps, h as SchedulingCalendarView, i as SchedulingDatePart, j as SchedulingEntryState, k as SchedulingLegendItem, l as SchedulingMarker, m as SchedulingMarkerEmphasis, n as SchedulingOverlayKind, o as SchedulingOverlayPattern, p as SchedulingStatus } from '../SchedulingCalendar-WWyFL3Eo.js';