@tensor_1/react 2.22.0 → 2.24.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.
package/dist/index.cjs CHANGED
@@ -2932,81 +2932,543 @@ function SegmentedOption({
2932
2932
  }
2933
2933
 
2934
2934
  // src/components/TableControls.tsx
2935
- var import_react33 = require("react");
2935
+ var import_react34 = require("react");
2936
+
2937
+ // src/components/EditorIcons.tsx
2936
2938
  var import_jsx_runtime49 = require("react/jsx-runtime");
2937
- function ViewMenu({ density, densityLabel, densityOptions, onDensityChange, zebra, freeze, columns, columnsLabel, onColumnVisibilityChange }) {
2938
- const densityLabelId = (0, import_react33.useId)();
2939
- const zebraLabelId = (0, import_react33.useId)();
2940
- const freezeLabelId = (0, import_react33.useId)();
2941
- return /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("div", { className: "uix-view-menu", children: [
2942
- /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("div", { className: "uix-view-menu__group", children: [
2943
- /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("div", { id: densityLabelId, className: "uix-view-menu__label", children: densityLabel }),
2944
- /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(Segmented, { value: density, onChange: onDensityChange, "aria-labelledby": densityLabelId, children: densityOptions.map((option) => /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(SegmentedOption, { value: option.value, children: option.label }, option.value)) })
2939
+ var PATHS = {
2940
+ heading1: "M4 12h8M4 18V6M12 18V6M17 12l3-2v8",
2941
+ heading2: "M4 12h8M4 18V6M12 18V6M21 18h-4c0-4 4-3 4-6 0-1.5-2-2.5-4-1",
2942
+ heading3: "M4 12h8M4 18V6M12 18V6M17.5 10.5c1.7-1 3.5 0 3.5 1.5a2 2 0 0 1-2 2M17 17.5c2 1.5 4 .3 4-1.5a2 2 0 0 0-2-2",
2943
+ bold: "M6 12h9a4 4 0 0 1 0 8H7a1 1 0 0 1-1-1V5a1 1 0 0 1 1-1h7a4 4 0 0 1 0 8",
2944
+ italic: "M19 4h-9M14 20H5M15 4 9 20",
2945
+ strike: "M16 4H9a3 3 0 0 0-2.83 4M14 12a4 4 0 0 1 0 8H6M4 12h16",
2946
+ code: "m16 18 6-6-6-6M8 6l-6 6 6 6",
2947
+ bulletList: "M3 12h.01M3 18h.01M3 6h.01M8 12h13M8 18h13M8 6h13",
2948
+ orderedList: "M10 12h11M10 18h11M10 6h11M4 10h2M4 6h1v4M6 18H4c0-1 2-2 2-3s-1-1.5-2-1",
2949
+ taskList: "m3 17 2 2 4-4M3 7l2 2 4-4M13 6h8M13 12h8M13 18h8",
2950
+ blockquote: "M17 6H3M21 12H8M21 18H8M3 12v6",
2951
+ codeBlock: "m10 9-3 3 3 3M14 15l3-3-3-3M5 3h14a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2Z",
2952
+ horizontalRule: "M5 12h14",
2953
+ link: "M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71",
2954
+ table: "M12 3v18M5 3h14a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2ZM3 9h18M3 15h18",
2955
+ tableAddRow: "M4 3h16a1 1 0 0 1 1 1v6a1 1 0 0 1-1 1H4a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1ZM12 15v6M9 18h6",
2956
+ tableAddColumn: "M4 3h6a1 1 0 0 1 1 1v16a1 1 0 0 1-1 1H4a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1ZM18 9v6M15 12h6",
2957
+ tableDeleteRow: "M4 3h16a1 1 0 0 1 1 1v6a1 1 0 0 1-1 1H4a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1ZM9 18h6",
2958
+ tableDeleteColumn: "M4 3h6a1 1 0 0 1 1 1v16a1 1 0 0 1-1 1H4a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1ZM15 12h6",
2959
+ trash: "M3 6h18M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6M8 6V4c0-1 1-2 2-2h4c1 0 2 1 2 2v2",
2960
+ image: "M5 3h14a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2ZM9 7a2 2 0 1 0 0 4 2 2 0 0 0 0-4ZM21 15l-3.09-3.09a2 2 0 0 0-2.82 0L6 21",
2961
+ emoji: "M12 2a10 10 0 1 0 0 20 10 10 0 0 0 0-20ZM8 14s1.5 2 4 2 4-2 4-2M9 9h.01M15 9h.01",
2962
+ addReaction: "M22 11v1a10 10 0 1 1-9-10M8 14s1.5 2 4 2 4-2 4-2M9 9h.01M15 9h.01M16 5h6M19 2v6",
2963
+ undo: "M9 14 4 9l5-5M4 9h10.5a5.5 5.5 0 0 1 0 11H11",
2964
+ redo: "m15 14 5-5-5-5M20 9H9.5a5.5 5.5 0 0 0 0 11H13",
2965
+ sourceMode: "M10 12.5 8 15l2 2.5M14 12.5l2 2.5-2 2.5M14 2v4a2 2 0 0 0 2 2h4M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z",
2966
+ richMode: "M14 2v4a2 2 0 0 0 2 2h4M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7ZM8 13h8M8 17h5",
2967
+ clock: "M12 2a10 10 0 1 0 0 20 10 10 0 0 0 0-20ZM12 6v6l4 2",
2968
+ grip: "M9 5h.01M9 12h.01M9 19h.01M15 5h.01M15 12h.01M15 19h.01",
2969
+ more: "M5 12h.01M12 12h.01M19 12h.01"
2970
+ };
2971
+ function EditorIcon({ name, ...props }) {
2972
+ return /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(
2973
+ "svg",
2974
+ {
2975
+ viewBox: "0 0 24 24",
2976
+ fill: "none",
2977
+ stroke: "currentColor",
2978
+ strokeWidth: 2,
2979
+ strokeLinecap: "round",
2980
+ strokeLinejoin: "round",
2981
+ "aria-hidden": "true",
2982
+ focusable: "false",
2983
+ ...props,
2984
+ children: /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("path", { d: PATHS[name] })
2985
+ }
2986
+ );
2987
+ }
2988
+
2989
+ // src/components/Popover.tsx
2990
+ var import_react33 = require("react");
2991
+ var import_jsx_runtime50 = require("react/jsx-runtime");
2992
+ function Popover({
2993
+ popover = "auto",
2994
+ anchor,
2995
+ placement = "bottom-start",
2996
+ offset = 6,
2997
+ className,
2998
+ children,
2999
+ ...props
3000
+ }) {
3001
+ const ref = (0, import_react33.useRef)(null);
3002
+ const [open, setOpen] = (0, import_react33.useState)(false);
3003
+ const popoverAttr = { popover };
3004
+ const reposition = useAnchoredPosition(anchor ?? null, ref, {
3005
+ open: open && !!anchor,
3006
+ placement,
3007
+ offset
3008
+ });
3009
+ (0, import_react33.useEffect)(() => {
3010
+ const el = ref.current;
3011
+ if (!el || !anchor) return;
3012
+ const sync = () => {
3013
+ const isOpen = el.matches(":popover-open");
3014
+ if (isOpen) reposition();
3015
+ setOpen(isOpen);
3016
+ };
3017
+ el.addEventListener("toggle", sync);
3018
+ return () => el.removeEventListener("toggle", sync);
3019
+ }, [anchor, reposition]);
3020
+ return /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("div", { ref, className: cx("uix-popover", className), ...popoverAttr, ...props, children });
3021
+ }
3022
+
3023
+ // src/components/TableControls.tsx
3024
+ var import_jsx_runtime51 = require("react/jsx-runtime");
3025
+ var VIEW_MENU_COLUMN_LABELS = {
3026
+ rowActions: "Column actions: {label}",
3027
+ reorder: "Drag to reorder: {label}",
3028
+ moveUp: "Move up",
3029
+ moveDown: "Move down",
3030
+ hide: "Hide",
3031
+ show: "Show",
3032
+ required: "Always shown",
3033
+ moved: "{label} moved to position {position} of {count}"
3034
+ };
3035
+ var fill = (template, values) => template.replace(/\{(\w+)\}/g, (match, name) => name in values ? String(values[name]) : match);
3036
+ var columnText = (column) => column.textLabel ?? (typeof column.label === "string" ? column.label : column.id);
3037
+ var isPopoverOpen = (el) => {
3038
+ try {
3039
+ return !!el?.matches(":popover-open");
3040
+ } catch {
3041
+ return false;
3042
+ }
3043
+ };
3044
+ function ColumnRowMenu({ label, actions, triggerRef }) {
3045
+ const [open, setOpen] = (0, import_react34.useState)(false);
3046
+ const menuId = (0, import_react34.useId)();
3047
+ const button = (0, import_react34.useRef)(null);
3048
+ const items = (0, import_react34.useRef)([]);
3049
+ const wasOpenAtPress = (0, import_react34.useRef)(false);
3050
+ const enabled = () => items.current.filter((el) => !!el && !el.disabled);
3051
+ const close = (returnFocus) => {
3052
+ const el = document.getElementById(menuId);
3053
+ if (isPopoverOpen(el)) el.hidePopover();
3054
+ setOpen(false);
3055
+ if (returnFocus) button.current?.focus();
3056
+ };
3057
+ (0, import_react34.useEffect)(() => {
3058
+ if (!open) return;
3059
+ const el = document.getElementById(menuId);
3060
+ if (el && typeof el.showPopover === "function" && !isPopoverOpen(el)) {
3061
+ try {
3062
+ el.showPopover();
3063
+ } catch {
3064
+ }
3065
+ }
3066
+ enabled()[0]?.focus();
3067
+ const onToggle = (event) => {
3068
+ if (event.newState === "closed") setOpen(false);
3069
+ };
3070
+ const onKeyDown = (event) => {
3071
+ if (event.key !== "Escape") return;
3072
+ event.preventDefault();
3073
+ event.stopPropagation();
3074
+ close(true);
3075
+ };
3076
+ el?.addEventListener("toggle", onToggle);
3077
+ document.addEventListener("keydown", onKeyDown, true);
3078
+ return () => {
3079
+ el?.removeEventListener("toggle", onToggle);
3080
+ document.removeEventListener("keydown", onKeyDown, true);
3081
+ };
3082
+ }, [open, menuId]);
3083
+ const onMenuKeyDown = (event) => {
3084
+ const list = enabled();
3085
+ const at = list.indexOf(document.activeElement);
3086
+ const focus = (index) => {
3087
+ event.preventDefault();
3088
+ list[(index + list.length) % list.length]?.focus();
3089
+ };
3090
+ if (event.key === "ArrowDown") focus(at + 1);
3091
+ else if (event.key === "ArrowUp") focus(at - 1);
3092
+ else if (event.key === "Home") focus(0);
3093
+ else if (event.key === "End") focus(list.length - 1);
3094
+ else if (event.key === "Tab") close(false);
3095
+ };
3096
+ return /* @__PURE__ */ (0, import_jsx_runtime51.jsxs)("span", { className: "uix-view-menu__actions", children: [
3097
+ /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(
3098
+ "button",
3099
+ {
3100
+ ref: (el) => {
3101
+ button.current = el;
3102
+ triggerRef(el);
3103
+ },
3104
+ type: "button",
3105
+ className: "uix-btn uix-btn--ghost uix-btn--sm uix-btn--icon",
3106
+ "aria-label": label,
3107
+ "aria-haspopup": "menu",
3108
+ "aria-expanded": open,
3109
+ "aria-controls": open ? menuId : void 0,
3110
+ onPointerDown: () => {
3111
+ wasOpenAtPress.current = isPopoverOpen(document.getElementById(menuId));
3112
+ },
3113
+ onClick: () => {
3114
+ const wasOpen = wasOpenAtPress.current;
3115
+ wasOpenAtPress.current = false;
3116
+ if (wasOpen) return;
3117
+ if (open) close(false);
3118
+ else setOpen(true);
3119
+ },
3120
+ children: /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(EditorIcon, { name: "more" })
3121
+ }
3122
+ ),
3123
+ open && /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(Popover, { id: menuId, anchor: button, placement: "bottom-end", offset: 4, role: "menu", "aria-label": label, className: "uix-view-menu__row-menu", onKeyDown: onMenuKeyDown, children: actions.map((action, index) => /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(
3124
+ "button",
3125
+ {
3126
+ ref: (el) => {
3127
+ items.current[index] = el;
3128
+ },
3129
+ type: "button",
3130
+ role: "menuitem",
3131
+ tabIndex: -1,
3132
+ className: "uix-menu__item",
3133
+ disabled: action.disabled,
3134
+ onClick: () => {
3135
+ close(true);
3136
+ action.onSelect();
3137
+ },
3138
+ children: action.label
3139
+ },
3140
+ action.id
3141
+ )) })
3142
+ ] });
3143
+ }
3144
+ function ViewMenu({
3145
+ density,
3146
+ densityLabel,
3147
+ densityOptions,
3148
+ onDensityChange,
3149
+ displayLabel,
3150
+ zebra,
3151
+ freeze,
3152
+ columns,
3153
+ columnsLabel,
3154
+ onColumnVisibilityChange,
3155
+ onReorder,
3156
+ columnLabels,
3157
+ footer,
3158
+ className
3159
+ }) {
3160
+ const baseId = (0, import_react34.useId)();
3161
+ const densityLabelId = `${baseId}-density`;
3162
+ const zebraLabelId = `${baseId}-zebra`;
3163
+ const freezeLabelId = `${baseId}-freeze`;
3164
+ const columnsLabelId = `${baseId}-columns`;
3165
+ const labels = { ...VIEW_MENU_COLUMN_LABELS, ...columnLabels };
3166
+ const list = columns ?? [];
3167
+ const [draft, setDraft] = (0, import_react34.useState)(null);
3168
+ const [announcement, setAnnouncement] = (0, import_react34.useState)("");
3169
+ const dragStart = (0, import_react34.useRef)(null);
3170
+ const listRef = (0, import_react34.useRef)(null);
3171
+ const triggers = (0, import_react34.useRef)(/* @__PURE__ */ new Map());
3172
+ const refocus = (0, import_react34.useRef)(null);
3173
+ const orderKey = JSON.stringify(list.map((column) => column.id));
3174
+ (0, import_react34.useEffect)(() => setDraft(null), [orderKey]);
3175
+ const order = draft ?? list.map((column) => column.id);
3176
+ const byId = new Map(list.map((column) => [column.id, column]));
3177
+ const ordered = order.map((id) => byId.get(id)).filter((column) => !!column);
3178
+ (0, import_react34.useEffect)(() => {
3179
+ const target = refocus.current;
3180
+ refocus.current = null;
3181
+ if (!target) return;
3182
+ const el = target.part === "actions" ? triggers.current.get(target.id) : Array.from(listRef.current?.children ?? []).find((row) => row.dataset.columnId === target.id)?.querySelector(".uix-view-menu__grip");
3183
+ if (el && document.activeElement !== el) el.focus();
3184
+ });
3185
+ const commit = (next, id) => {
3186
+ setDraft(next);
3187
+ onReorder?.([...next]);
3188
+ const column = byId.get(id);
3189
+ if (column) setAnnouncement(fill(labels.moved, { label: columnText(column), position: next.indexOf(id) + 1, count: next.length }));
3190
+ };
3191
+ const move = (id, delta, part) => {
3192
+ const next = placeId(order, id, order.indexOf(id) + delta);
3193
+ if (next === order) return;
3194
+ refocus.current = { id, part };
3195
+ commit(next, id);
3196
+ };
3197
+ const { dragging, start: startDrag } = useRowDrag(".uix-view-menu__col", {
3198
+ over: (id, index) => {
3199
+ const next = placeId(order, id, index);
3200
+ if (next !== order) setDraft(next);
3201
+ },
3202
+ drop: (id) => {
3203
+ const start = dragStart.current;
3204
+ dragStart.current = null;
3205
+ if (start && !sameOrder(start, order)) commit(order, id);
3206
+ }
3207
+ });
3208
+ const rowActions = (column, index) => [
3209
+ { id: "up", label: labels.moveUp, disabled: index === 0, onSelect: () => move(column.id, -1, "actions") },
3210
+ { id: "down", label: labels.moveDown, disabled: index === ordered.length - 1, onSelect: () => move(column.id, 1, "actions") },
3211
+ ...column.required || column.disabled ? [] : [column.visible ? { id: "hide", label: labels.hide, onSelect: () => onColumnVisibilityChange?.(column.id, false) } : { id: "show", label: labels.show, onSelect: () => onColumnVisibilityChange?.(column.id, true) }]
3212
+ ];
3213
+ const showDensity = !!densityOptions?.length && !!onDensityChange;
3214
+ return /* @__PURE__ */ (0, import_jsx_runtime51.jsxs)("div", { className: cx("uix-view-menu", className), "data-dragging": dragging ? "" : void 0, children: [
3215
+ showDensity && /* @__PURE__ */ (0, import_jsx_runtime51.jsxs)("div", { className: "uix-view-menu__group", children: [
3216
+ /* @__PURE__ */ (0, import_jsx_runtime51.jsx)("div", { id: densityLabelId, className: "uix-view-menu__label", children: densityLabel }),
3217
+ /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(Segmented, { value: density ?? "", onChange: onDensityChange, "aria-labelledby": densityLabelId, children: densityOptions.map((option) => /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(SegmentedOption, { value: option.value, children: option.label }, option.value)) })
2945
3218
  ] }),
2946
- (zebra || freeze) && /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("div", { className: "uix-view-menu__group", children: [
2947
- zebra && /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("div", { className: "uix-view-menu__row", children: [
2948
- /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("span", { id: zebraLabelId, children: zebra.label }),
2949
- /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(Switch, { checked: zebra.checked, "aria-labelledby": zebraLabelId, onChange: (event) => zebra.onChange(event.currentTarget.checked) })
3219
+ (zebra || freeze) && /* @__PURE__ */ (0, import_jsx_runtime51.jsxs)("div", { className: "uix-view-menu__group", children: [
3220
+ displayLabel != null && /* @__PURE__ */ (0, import_jsx_runtime51.jsx)("div", { className: "uix-view-menu__label", children: displayLabel }),
3221
+ zebra && /* @__PURE__ */ (0, import_jsx_runtime51.jsxs)("div", { className: "uix-view-menu__row", children: [
3222
+ /* @__PURE__ */ (0, import_jsx_runtime51.jsx)("span", { id: zebraLabelId, children: zebra.label }),
3223
+ /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(Switch, { checked: zebra.checked, "aria-labelledby": zebraLabelId, onChange: (event) => zebra.onChange(event.currentTarget.checked) })
2950
3224
  ] }),
2951
- freeze && /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("div", { className: "uix-view-menu__row", children: [
2952
- /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("span", { id: freezeLabelId, children: freeze.label }),
2953
- /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(Switch, { checked: freeze.checked, "aria-labelledby": freezeLabelId, onChange: (event) => freeze.onChange(event.currentTarget.checked) })
3225
+ freeze && /* @__PURE__ */ (0, import_jsx_runtime51.jsxs)("div", { className: "uix-view-menu__row", children: [
3226
+ /* @__PURE__ */ (0, import_jsx_runtime51.jsx)("span", { id: freezeLabelId, children: freeze.label }),
3227
+ /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(Switch, { checked: freeze.checked, "aria-labelledby": freezeLabelId, onChange: (event) => freeze.onChange(event.currentTarget.checked) })
2954
3228
  ] })
2955
3229
  ] }),
2956
- columns && columns.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("div", { className: "uix-view-menu__group", children: [
2957
- columnsLabel != null && /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("div", { className: "uix-view-menu__label", children: columnsLabel }),
2958
- /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("div", { className: "uix-view-menu__cols", children: columns.map((column) => /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(Checkbox, { label: column.label, checked: column.visible, disabled: column.disabled, onChange: (event) => onColumnVisibilityChange?.(column.id, event.currentTarget.checked) }, column.id)) })
2959
- ] })
3230
+ ordered.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime51.jsxs)("div", { className: "uix-view-menu__group", children: [
3231
+ columnsLabel != null && /* @__PURE__ */ (0, import_jsx_runtime51.jsx)("div", { id: columnsLabelId, className: "uix-view-menu__label", children: columnsLabel }),
3232
+ /* @__PURE__ */ (0, import_jsx_runtime51.jsx)("ul", { ref: listRef, className: "uix-view-menu__cols", "aria-labelledby": columnsLabel != null ? columnsLabelId : void 0, children: ordered.map((column, index) => {
3233
+ const text = columnText(column);
3234
+ return /* @__PURE__ */ (0, import_jsx_runtime51.jsxs)(
3235
+ "li",
3236
+ {
3237
+ className: "uix-view-menu__col",
3238
+ "data-column-id": column.id,
3239
+ "data-visible": String(column.visible),
3240
+ "data-required": column.required ? "true" : void 0,
3241
+ "data-dragging": dragging === column.id || void 0,
3242
+ children: [
3243
+ onReorder && /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(
3244
+ "button",
3245
+ {
3246
+ type: "button",
3247
+ className: "uix-view-menu__grip",
3248
+ tabIndex: -1,
3249
+ "aria-label": fill(labels.reorder, { label: text }),
3250
+ onPointerDown: (event) => {
3251
+ if (event.button !== 0) return;
3252
+ event.preventDefault();
3253
+ event.currentTarget.focus({ preventScroll: true });
3254
+ dragStart.current = order;
3255
+ startDrag(event, column.id);
3256
+ },
3257
+ onKeyDown: (event) => {
3258
+ if (event.key !== "ArrowUp" && event.key !== "ArrowDown") return;
3259
+ event.preventDefault();
3260
+ move(column.id, event.key === "ArrowUp" ? -1 : 1, "grip");
3261
+ },
3262
+ children: /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(EditorIcon, { name: "grip" })
3263
+ }
3264
+ ),
3265
+ column.required ? /* @__PURE__ */ (0, import_jsx_runtime51.jsxs)("span", { className: "uix-view-menu__col-toggle", title: labels.required, children: [
3266
+ /* @__PURE__ */ (0, import_jsx_runtime51.jsx)("span", { className: "uix-view-menu__col-box", "aria-hidden": "true" }),
3267
+ /* @__PURE__ */ (0, import_jsx_runtime51.jsx)("span", { className: "uix-view-menu__col-name", children: column.label })
3268
+ ] }) : /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(
3269
+ Checkbox,
3270
+ {
3271
+ className: "uix-view-menu__col-toggle",
3272
+ label: /* @__PURE__ */ (0, import_jsx_runtime51.jsx)("span", { className: "uix-view-menu__col-name", children: column.label }),
3273
+ checked: column.visible,
3274
+ disabled: column.disabled,
3275
+ onChange: (event) => onColumnVisibilityChange?.(column.id, event.currentTarget.checked)
3276
+ }
3277
+ ),
3278
+ onReorder && /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(
3279
+ ColumnRowMenu,
3280
+ {
3281
+ label: fill(labels.rowActions, { label: text }),
3282
+ actions: rowActions(column, index),
3283
+ triggerRef: (el) => {
3284
+ if (el) triggers.current.set(column.id, el);
3285
+ else triggers.current.delete(column.id);
3286
+ }
3287
+ }
3288
+ )
3289
+ ]
3290
+ },
3291
+ column.id
3292
+ );
3293
+ }) })
3294
+ ] }),
3295
+ footer != null && /* @__PURE__ */ (0, import_jsx_runtime51.jsx)("div", { className: "uix-view-menu__footer", children: footer }),
3296
+ onReorder && /* @__PURE__ */ (0, import_jsx_runtime51.jsx)("div", { role: "status", className: "uix-visually-hidden", children: announcement })
2960
3297
  ] });
2961
3298
  }
2962
3299
  function FilterPopover({ label, type = "text", value, onValueChange, options, applyLabel, clearLabel, onApply, onClear, placeholder }) {
2963
- return /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("div", { className: "uix-filter-popover", children: [
2964
- /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("label", { className: "uix-label", children: [
2965
- /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("span", { children: label }),
2966
- type === "select" || type === "enum" || type === "boolean" ? /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("select", { className: "uix-select", value, onChange: (event) => onValueChange(event.currentTarget.value), children: options?.map((option) => /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("option", { value: option.value, children: option.label }, option.value)) }) : /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(Input, { type, value, placeholder, onChange: (event) => onValueChange(event.currentTarget.value) })
3300
+ return /* @__PURE__ */ (0, import_jsx_runtime51.jsxs)("div", { className: "uix-filter-popover", children: [
3301
+ /* @__PURE__ */ (0, import_jsx_runtime51.jsxs)("label", { className: "uix-label", children: [
3302
+ /* @__PURE__ */ (0, import_jsx_runtime51.jsx)("span", { children: label }),
3303
+ type === "select" || type === "enum" || type === "boolean" ? /* @__PURE__ */ (0, import_jsx_runtime51.jsx)("select", { className: "uix-select", value, onChange: (event) => onValueChange(event.currentTarget.value), children: options?.map((option) => /* @__PURE__ */ (0, import_jsx_runtime51.jsx)("option", { value: option.value, children: option.label }, option.value)) }) : /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(Input, { type, value, placeholder, onChange: (event) => onValueChange(event.currentTarget.value) })
2967
3304
  ] }),
2968
- /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("div", { className: "uix-filter-popover__actions", children: [
2969
- /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(Button, { type: "button", onClick: onClear, children: clearLabel }),
2970
- /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(Button, { type: "button", variant: "primary", onClick: onApply, children: applyLabel })
3305
+ /* @__PURE__ */ (0, import_jsx_runtime51.jsxs)("div", { className: "uix-filter-popover__actions", children: [
3306
+ /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(Button, { type: "button", onClick: onClear, children: clearLabel }),
3307
+ /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(Button, { type: "button", variant: "primary", onClick: onApply, children: applyLabel })
2971
3308
  ] })
2972
3309
  ] });
2973
3310
  }
2974
- function SavedViewMenu({ items, onSelect, onPinChange, pinLabel, unpinLabel, emptyLabel, actions, footer }) {
2975
- return /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("ul", { className: "uix-menu uix-saved-views", children: [
2976
- items.length === 0 && emptyLabel != null && /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("li", { className: "uix-menu__label", children: emptyLabel }),
2977
- items.map((item) => /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("li", { className: "uix-saved-views__row", children: [
2978
- /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("button", { type: "button", className: "uix-menu__item", "data-active": item.active || void 0, onClick: () => onSelect(item.id), children: item.label }),
2979
- onPinChange && /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("button", { type: "button", className: "uix-saved-views__pin", "aria-label": item.pinned ? unpinLabel : pinLabel, "data-on": item.pinned || void 0, onClick: () => onPinChange(item.id, !item.pinned), children: "\u2605" }),
2980
- actions?.(item)
2981
- ] }, item.id)),
2982
- footer != null && /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("li", { className: "uix-saved-views__footer", children: footer })
3311
+ var sameOrder = (a, b) => a.length === b.length && a.every((id, i) => id === b[i]);
3312
+ function dropIndex(rows, dragged, clientY) {
3313
+ let index = 0;
3314
+ for (const row of rows) {
3315
+ if (row === dragged) continue;
3316
+ const box = row.getBoundingClientRect();
3317
+ if (clientY > box.top + box.height / 2) index++;
3318
+ }
3319
+ return index;
3320
+ }
3321
+ function useRowDrag(rowSelector, handlers) {
3322
+ const [dragging, setDragging] = (0, import_react34.useState)(null);
3323
+ const drag = (0, import_react34.useRef)(null);
3324
+ const latest = (0, import_react34.useRef)(handlers);
3325
+ latest.current = handlers;
3326
+ (0, import_react34.useEffect)(() => {
3327
+ if (!dragging) return;
3328
+ const move = (event) => {
3329
+ const current = drag.current;
3330
+ if (!current) return;
3331
+ latest.current.over(current.id, dropIndex(Array.from(current.list.querySelectorAll(`:scope > ${rowSelector}`)), current.row, event.clientY));
3332
+ };
3333
+ const end = () => {
3334
+ const current = drag.current;
3335
+ drag.current = null;
3336
+ setDragging(null);
3337
+ if (current) latest.current.drop(current.id);
3338
+ };
3339
+ window.addEventListener("pointermove", move);
3340
+ window.addEventListener("pointerup", end);
3341
+ window.addEventListener("pointercancel", end);
3342
+ return () => {
3343
+ window.removeEventListener("pointermove", move);
3344
+ window.removeEventListener("pointerup", end);
3345
+ window.removeEventListener("pointercancel", end);
3346
+ };
3347
+ }, [dragging, rowSelector]);
3348
+ const start = (event, id) => {
3349
+ const row = event.currentTarget.closest("li");
3350
+ if (!row?.parentElement) return;
3351
+ event.currentTarget.setPointerCapture?.(event.pointerId);
3352
+ drag.current = { id, list: row.parentElement, row };
3353
+ setDragging(id);
3354
+ };
3355
+ return { dragging, start };
3356
+ }
3357
+ function placeId(ids, id, index) {
3358
+ const from = ids.indexOf(id);
3359
+ const to = Math.max(0, Math.min(index, ids.length - 1));
3360
+ if (from < 0 || from === to) return ids;
3361
+ const next = ids.filter((other) => other !== id);
3362
+ next.splice(to, 0, id);
3363
+ return next;
3364
+ }
3365
+ function SavedViewMenu({ items, sections, onSelect, onPinChange, pinLabel, unpinLabel, onReorder, reorderLabel, emptyLabel, actions, footer }) {
3366
+ const baseId = (0, import_react34.useId)();
3367
+ const groups = sections ?? [{ id: void 0, items: items ?? [] }];
3368
+ const [draft, setDraft] = (0, import_react34.useState)(null);
3369
+ const dragStart = (0, import_react34.useRef)(null);
3370
+ const dragGroup = (0, import_react34.useRef)(void 0);
3371
+ const orderKey = JSON.stringify(groups.map((group) => [group.id, group.items.map((item) => item.id)]));
3372
+ (0, import_react34.useEffect)(() => setDraft(null), [orderKey]);
3373
+ const orderOf = (group) => draft && draft.group === group.id ? draft.ids : group.items.map((item) => item.id);
3374
+ const move = (group, id, delta) => {
3375
+ const current = orderOf(group);
3376
+ const next = placeId(current, id, current.indexOf(id) + delta);
3377
+ if (next === current) return;
3378
+ setDraft({ group: group.id, ids: next });
3379
+ onReorder?.([...next], group.id);
3380
+ };
3381
+ const { dragging, start: startDrag } = useRowDrag(".uix-saved-views__row", {
3382
+ over: (id, index) => {
3383
+ const group = groups.find((candidate) => candidate.id === dragGroup.current);
3384
+ if (!group) return;
3385
+ const current = orderOf(group);
3386
+ const next = placeId(current, id, index);
3387
+ if (next !== current) setDraft({ group: group.id, ids: next });
3388
+ },
3389
+ drop: () => {
3390
+ const group = groups.find((candidate) => candidate.id === dragGroup.current);
3391
+ const start = dragStart.current;
3392
+ dragStart.current = null;
3393
+ if (!group) return;
3394
+ const end = orderOf(group);
3395
+ if (start && !sameOrder(start, end)) onReorder?.([...end], group.id);
3396
+ }
3397
+ });
3398
+ const visible = groups.filter((group) => group.items.length > 0);
3399
+ const renderRows = (group, groupIndex) => {
3400
+ const byId = new Map(group.items.map((item) => [item.id, item]));
3401
+ return orderOf(group).map((id, index) => {
3402
+ const item = byId.get(id);
3403
+ if (!item) return null;
3404
+ const nameId = `${baseId}-${groupIndex}-${index}`;
3405
+ const extra = actions?.(item);
3406
+ return /* @__PURE__ */ (0, import_jsx_runtime51.jsxs)("li", { className: "uix-saved-views__row", "data-active": item.active || void 0, "data-dragging": dragging === item.id || void 0, children: [
3407
+ onReorder && /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(
3408
+ "button",
3409
+ {
3410
+ type: "button",
3411
+ className: "uix-saved-views__grip",
3412
+ "aria-label": reorderLabel,
3413
+ "aria-describedby": nameId,
3414
+ onPointerDown: (event) => {
3415
+ if (event.button !== 0) return;
3416
+ event.preventDefault();
3417
+ dragStart.current = orderOf(group);
3418
+ dragGroup.current = group.id;
3419
+ startDrag(event, item.id);
3420
+ },
3421
+ onKeyDown: (event) => {
3422
+ if (event.key !== "ArrowUp" && event.key !== "ArrowDown") return;
3423
+ event.preventDefault();
3424
+ move(group, item.id, event.key === "ArrowUp" ? -1 : 1);
3425
+ },
3426
+ children: /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(EditorIcon, { name: "grip" })
3427
+ }
3428
+ ),
3429
+ /* @__PURE__ */ (0, import_jsx_runtime51.jsx)("button", { type: "button", id: nameId, className: "uix-menu__item", "data-active": item.active || void 0, "aria-current": item.active || void 0, title: typeof item.label === "string" ? item.label : void 0, onClick: () => onSelect(item.id), children: /* @__PURE__ */ (0, import_jsx_runtime51.jsx)("span", { className: "uix-saved-views__name", children: item.label }) }),
3430
+ onPinChange && /* @__PURE__ */ (0, import_jsx_runtime51.jsx)("button", { type: "button", className: "uix-saved-views__pin", "aria-label": item.pinned ? unpinLabel : pinLabel, "data-on": item.pinned || void 0, onClick: () => onPinChange(item.id, !item.pinned), children: "\u2605" }),
3431
+ extra != null && extra !== false && /* @__PURE__ */ (0, import_jsx_runtime51.jsx)("span", { className: "uix-saved-views__actions", children: extra })
3432
+ ] }, item.id);
3433
+ });
3434
+ };
3435
+ return /* @__PURE__ */ (0, import_jsx_runtime51.jsxs)("ul", { className: "uix-menu uix-saved-views", "data-dragging": dragging ? "" : void 0, children: [
3436
+ visible.length === 0 && emptyLabel != null && /* @__PURE__ */ (0, import_jsx_runtime51.jsx)("li", { className: "uix-menu__label", children: emptyLabel }),
3437
+ sections ? visible.map((group, groupIndex) => {
3438
+ const labelId = `${baseId}-section-${groupIndex}`;
3439
+ return /* @__PURE__ */ (0, import_jsx_runtime51.jsxs)("li", { className: "uix-saved-views__section", children: [
3440
+ /* @__PURE__ */ (0, import_jsx_runtime51.jsx)("div", { id: labelId, className: "uix-menu__label uix-saved-views__section-label", children: group.label }),
3441
+ /* @__PURE__ */ (0, import_jsx_runtime51.jsx)("ul", { className: "uix-saved-views__group", "aria-labelledby": labelId, children: renderRows(group, groupIndex) })
3442
+ ] }, group.id);
3443
+ }) : visible[0] && renderRows(visible[0], 0),
3444
+ footer != null && /* @__PURE__ */ (0, import_jsx_runtime51.jsx)("li", { className: "uix-saved-views__footer", children: footer })
2983
3445
  ] });
2984
3446
  }
2985
3447
 
2986
3448
  // src/components/Timeline.tsx
2987
- var import_jsx_runtime50 = require("react/jsx-runtime");
3449
+ var import_jsx_runtime52 = require("react/jsx-runtime");
2988
3450
  function Timeline({ children, className, ...props }) {
2989
- return /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("ol", { className: cx("uix-timeline", className), ...props, children });
3451
+ return /* @__PURE__ */ (0, import_jsx_runtime52.jsx)("ol", { className: cx("uix-timeline", className), ...props, children });
2990
3452
  }
2991
3453
  function TimelineItem({ node, meta, children, className, ...props }) {
2992
- return /* @__PURE__ */ (0, import_jsx_runtime50.jsxs)("li", { className: cx("uix-timeline__item", className), ...props, children: [
2993
- /* @__PURE__ */ (0, import_jsx_runtime50.jsxs)("div", { className: "uix-timeline__rail", "aria-hidden": "true", children: [
2994
- node ?? /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("span", { className: "uix-timeline__node" }),
2995
- /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("span", { className: "uix-timeline__line" })
3454
+ return /* @__PURE__ */ (0, import_jsx_runtime52.jsxs)("li", { className: cx("uix-timeline__item", className), ...props, children: [
3455
+ /* @__PURE__ */ (0, import_jsx_runtime52.jsxs)("div", { className: "uix-timeline__rail", "aria-hidden": "true", children: [
3456
+ node ?? /* @__PURE__ */ (0, import_jsx_runtime52.jsx)("span", { className: "uix-timeline__node" }),
3457
+ /* @__PURE__ */ (0, import_jsx_runtime52.jsx)("span", { className: "uix-timeline__line" })
2996
3458
  ] }),
2997
- /* @__PURE__ */ (0, import_jsx_runtime50.jsxs)("div", { className: "uix-timeline__body", children: [
2998
- meta != null && /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("div", { className: "uix-timeline__meta", children: meta }),
3459
+ /* @__PURE__ */ (0, import_jsx_runtime52.jsxs)("div", { className: "uix-timeline__body", children: [
3460
+ meta != null && /* @__PURE__ */ (0, import_jsx_runtime52.jsx)("div", { className: "uix-timeline__meta", children: meta }),
2999
3461
  children
3000
3462
  ] })
3001
3463
  ] });
3002
3464
  }
3003
3465
 
3004
3466
  // src/components/Pipeline.tsx
3005
- var import_react34 = require("react");
3006
- var import_jsx_runtime51 = require("react/jsx-runtime");
3467
+ var import_react35 = require("react");
3468
+ var import_jsx_runtime53 = require("react/jsx-runtime");
3007
3469
  function Pipeline({ detailed = false, children, className, tabIndex, ...props }) {
3008
- const stages = detailed ? import_react34.Children.map(children, (child) => (0, import_react34.isValidElement)(child) && child.type === PipelineStage ? (0, import_react34.cloneElement)(child, { detailed: child.props.detailed ?? true }) : child) : children;
3009
- return /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(
3470
+ const stages = detailed ? import_react35.Children.map(children, (child) => (0, import_react35.isValidElement)(child) && child.type === PipelineStage ? (0, import_react35.cloneElement)(child, { detailed: child.props.detailed ?? true }) : child) : children;
3471
+ return /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
3010
3472
  "ol",
3011
3473
  {
3012
3474
  className: cx("uix-pipeline", detailed && "uix-pipeline--detailed", className),
@@ -3043,20 +3505,20 @@ function PipelineStage({
3043
3505
  const current = currentProp ?? (state === "active" || state === "current" || state === "running");
3044
3506
  const resolvedStateLabel = stateLabel ?? DEFAULT_STATE_LABELS[state];
3045
3507
  const showDetails = detailed || description != null || meta != null || marker != null;
3046
- return /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(
3508
+ return /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
3047
3509
  "li",
3048
3510
  {
3049
3511
  className: cx("uix-pipeline__stage", className),
3050
3512
  "data-state": state,
3051
3513
  "aria-current": current ? "step" : void 0,
3052
3514
  ...props,
3053
- children: showDetails ? /* @__PURE__ */ (0, import_jsx_runtime51.jsxs)(import_jsx_runtime51.Fragment, { children: [
3054
- /* @__PURE__ */ (0, import_jsx_runtime51.jsx)("span", { className: "uix-pipeline__marker", "aria-hidden": "true", children: marker }),
3055
- /* @__PURE__ */ (0, import_jsx_runtime51.jsxs)("div", { className: "uix-pipeline__content", children: [
3056
- /* @__PURE__ */ (0, import_jsx_runtime51.jsx)("div", { className: "uix-pipeline__eyebrow", children: /* @__PURE__ */ (0, import_jsx_runtime51.jsx)("span", { className: "uix-pipeline__state", children: resolvedStateLabel }) }),
3057
- /* @__PURE__ */ (0, import_jsx_runtime51.jsx)("div", { className: "uix-pipeline__title", children: label }),
3058
- description != null && /* @__PURE__ */ (0, import_jsx_runtime51.jsx)("div", { className: "uix-pipeline__description", children: description }),
3059
- meta != null && /* @__PURE__ */ (0, import_jsx_runtime51.jsx)("div", { className: "uix-pipeline__meta", children: meta })
3515
+ children: showDetails ? /* @__PURE__ */ (0, import_jsx_runtime53.jsxs)(import_jsx_runtime53.Fragment, { children: [
3516
+ /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("span", { className: "uix-pipeline__marker", "aria-hidden": "true", children: marker }),
3517
+ /* @__PURE__ */ (0, import_jsx_runtime53.jsxs)("div", { className: "uix-pipeline__content", children: [
3518
+ /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("div", { className: "uix-pipeline__eyebrow", children: /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("span", { className: "uix-pipeline__state", children: resolvedStateLabel }) }),
3519
+ /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("div", { className: "uix-pipeline__title", children: label }),
3520
+ description != null && /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("div", { className: "uix-pipeline__description", children: description }),
3521
+ meta != null && /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("div", { className: "uix-pipeline__meta", children: meta })
3060
3522
  ] })
3061
3523
  ] }) : label
3062
3524
  }
@@ -3064,9 +3526,9 @@ function PipelineStage({
3064
3526
  }
3065
3527
 
3066
3528
  // src/components/Flow.tsx
3067
- var import_jsx_runtime52 = require("react/jsx-runtime");
3529
+ var import_jsx_runtime54 = require("react/jsx-runtime");
3068
3530
  function Flow({ variant = "linear", panel = false, children, className, role = "group", ...props }) {
3069
- return /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(
3531
+ return /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
3070
3532
  "div",
3071
3533
  {
3072
3534
  className: cx("uix-flow", `uix-flow--${variant}`, panel && "uix-flow--panel", className),
@@ -3096,67 +3558,33 @@ function FlowNode({
3096
3558
  ...props
3097
3559
  }) {
3098
3560
  const resolvedStateLabel = stateLabel ?? FLOW_STATE_LABELS[state];
3099
- return /* @__PURE__ */ (0, import_jsx_runtime52.jsxs)("div", { className: cx("uix-node", `uix-node--${state}`, icon == null && "uix-node--no-icon", wide && "uix-node--wide", className), ...props, children: [
3100
- icon != null && /* @__PURE__ */ (0, import_jsx_runtime52.jsx)("span", { className: "uix-node__icon", "aria-hidden": "true", children: icon }),
3101
- /* @__PURE__ */ (0, import_jsx_runtime52.jsxs)("div", { className: "uix-node__body", children: [
3102
- eyebrow != null && /* @__PURE__ */ (0, import_jsx_runtime52.jsx)("div", { className: "uix-node__eyebrow", children: eyebrow }),
3103
- /* @__PURE__ */ (0, import_jsx_runtime52.jsx)("div", { className: "uix-node__title", children: title }),
3104
- meta != null && /* @__PURE__ */ (0, import_jsx_runtime52.jsx)("div", { className: "uix-node__meta", children: meta }),
3105
- /* @__PURE__ */ (0, import_jsx_runtime52.jsx)("div", { className: "uix-node__status", children: resolvedStateLabel })
3561
+ return /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)("div", { className: cx("uix-node", `uix-node--${state}`, icon == null && "uix-node--no-icon", wide && "uix-node--wide", className), ...props, children: [
3562
+ icon != null && /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("span", { className: "uix-node__icon", "aria-hidden": "true", children: icon }),
3563
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)("div", { className: "uix-node__body", children: [
3564
+ eyebrow != null && /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("div", { className: "uix-node__eyebrow", children: eyebrow }),
3565
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("div", { className: "uix-node__title", children: title }),
3566
+ meta != null && /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("div", { className: "uix-node__meta", children: meta }),
3567
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("div", { className: "uix-node__status", children: resolvedStateLabel })
3106
3568
  ] }),
3107
- footer != null && /* @__PURE__ */ (0, import_jsx_runtime52.jsx)("div", { className: "uix-node__footer", children: footer })
3569
+ footer != null && /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("div", { className: "uix-node__footer", children: footer })
3108
3570
  ] });
3109
3571
  }
3110
3572
 
3111
3573
  // src/components/Prose.tsx
3112
- var import_jsx_runtime53 = require("react/jsx-runtime");
3574
+ var import_jsx_runtime55 = require("react/jsx-runtime");
3113
3575
  function Prose({ children, className, ...props }) {
3114
- return /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("div", { className: cx("uix-prose", className), ...props, children });
3576
+ return /* @__PURE__ */ (0, import_jsx_runtime55.jsx)("div", { className: cx("uix-prose", className), ...props, children });
3115
3577
  }
3116
3578
  function Note({ tone, icon, children, className, ...props }) {
3117
- return /* @__PURE__ */ (0, import_jsx_runtime53.jsxs)("div", { className: cx("uix-note", tone && `uix-note--${tone}`, className), ...props, children: [
3118
- icon != null && /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("div", { className: "uix-note__icon", children: icon }),
3119
- /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("div", { className: "uix-note__body", children })
3579
+ return /* @__PURE__ */ (0, import_jsx_runtime55.jsxs)("div", { className: cx("uix-note", tone && `uix-note--${tone}`, className), ...props, children: [
3580
+ icon != null && /* @__PURE__ */ (0, import_jsx_runtime55.jsx)("div", { className: "uix-note__icon", children: icon }),
3581
+ /* @__PURE__ */ (0, import_jsx_runtime55.jsx)("div", { className: "uix-note__body", children })
3120
3582
  ] });
3121
3583
  }
3122
3584
 
3123
- // src/components/Popover.tsx
3124
- var import_react35 = require("react");
3125
- var import_jsx_runtime54 = require("react/jsx-runtime");
3126
- function Popover({
3127
- popover = "auto",
3128
- anchor,
3129
- placement = "bottom-start",
3130
- offset = 6,
3131
- className,
3132
- children,
3133
- ...props
3134
- }) {
3135
- const ref = (0, import_react35.useRef)(null);
3136
- const [open, setOpen] = (0, import_react35.useState)(false);
3137
- const popoverAttr = { popover };
3138
- const reposition = useAnchoredPosition(anchor ?? null, ref, {
3139
- open: open && !!anchor,
3140
- placement,
3141
- offset
3142
- });
3143
- (0, import_react35.useEffect)(() => {
3144
- const el = ref.current;
3145
- if (!el || !anchor) return;
3146
- const sync = () => {
3147
- const isOpen = el.matches(":popover-open");
3148
- if (isOpen) reposition();
3149
- setOpen(isOpen);
3150
- };
3151
- el.addEventListener("toggle", sync);
3152
- return () => el.removeEventListener("toggle", sync);
3153
- }, [anchor, reposition]);
3154
- return /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("div", { ref, className: cx("uix-popover", className), ...popoverAttr, ...props, children });
3155
- }
3156
-
3157
3585
  // src/components/CommandPalette.tsx
3158
3586
  var import_react36 = require("react");
3159
- var import_jsx_runtime55 = require("react/jsx-runtime");
3587
+ var import_jsx_runtime56 = require("react/jsx-runtime");
3160
3588
  var CmdkContext = (0, import_react36.createContext)(null);
3161
3589
  function CommandPalette({ inputProps, children, inputLabel = "Command palette", className, ...props }) {
3162
3590
  const listId = (0, import_react36.useId)();
@@ -3175,8 +3603,8 @@ function CommandPalette({ inputProps, children, inputLabel = "Command palette",
3175
3603
  return () => clearTimeout(t);
3176
3604
  }, [count]);
3177
3605
  const ctx = (0, import_react36.useMemo)(() => ({ listId, setActive, registerItem }), [listId, setActive, registerItem]);
3178
- return /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(CmdkContext.Provider, { value: ctx, children: /* @__PURE__ */ (0, import_jsx_runtime55.jsxs)("div", { className: cx("uix-cmdk", className), ...props, children: [
3179
- /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(
3606
+ return /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(CmdkContext.Provider, { value: ctx, children: /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)("div", { className: cx("uix-cmdk", className), ...props, children: [
3607
+ /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(
3180
3608
  "input",
3181
3609
  {
3182
3610
  className: "uix-cmdk__input",
@@ -3189,14 +3617,14 @@ function CommandPalette({ inputProps, children, inputLabel = "Command palette",
3189
3617
  ...inputProps
3190
3618
  }
3191
3619
  ),
3192
- /* @__PURE__ */ (0, import_jsx_runtime55.jsx)("div", { className: "uix-cmdk__list", role: "listbox", id: listId, children }),
3193
- /* @__PURE__ */ (0, import_jsx_runtime55.jsx)("span", { className: "uix-visually-hidden", role: "status", children: announced })
3620
+ /* @__PURE__ */ (0, import_jsx_runtime56.jsx)("div", { className: "uix-cmdk__list", role: "listbox", id: listId, children }),
3621
+ /* @__PURE__ */ (0, import_jsx_runtime56.jsx)("span", { className: "uix-visually-hidden", role: "status", children: announced })
3194
3622
  ] }) });
3195
3623
  }
3196
3624
  function CommandGroup({ label, children }) {
3197
3625
  const labelId = (0, import_react36.useId)();
3198
- return /* @__PURE__ */ (0, import_jsx_runtime55.jsxs)("div", { role: "group", "aria-labelledby": label != null ? labelId : void 0, children: [
3199
- label != null && /* @__PURE__ */ (0, import_jsx_runtime55.jsx)("div", { className: "uix-cmdk__group", id: labelId, children: label }),
3626
+ return /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)("div", { role: "group", "aria-labelledby": label != null ? labelId : void 0, children: [
3627
+ label != null && /* @__PURE__ */ (0, import_jsx_runtime56.jsx)("div", { className: "uix-cmdk__group", id: labelId, children: label }),
3200
3628
  children
3201
3629
  ] });
3202
3630
  }
@@ -3210,7 +3638,7 @@ function CommandItem({ icon, shortcut, active, children, className, id, ...props
3210
3638
  ctx.setActive(itemId, true);
3211
3639
  return () => ctx.setActive(itemId, false);
3212
3640
  }, [ctx, itemId, active]);
3213
- return /* @__PURE__ */ (0, import_jsx_runtime55.jsxs)(
3641
+ return /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)(
3214
3642
  "div",
3215
3643
  {
3216
3644
  className: cx("uix-cmdk__item", className),
@@ -3221,7 +3649,7 @@ function CommandItem({ icon, shortcut, active, children, className, id, ...props
3221
3649
  ...props,
3222
3650
  children: [
3223
3651
  icon,
3224
- /* @__PURE__ */ (0, import_jsx_runtime55.jsx)("span", { children }),
3652
+ /* @__PURE__ */ (0, import_jsx_runtime56.jsx)("span", { children }),
3225
3653
  shortcut
3226
3654
  ]
3227
3655
  }
@@ -3230,9 +3658,9 @@ function CommandItem({ icon, shortcut, active, children, className, id, ...props
3230
3658
 
3231
3659
  // src/components/Inbox.tsx
3232
3660
  var import_react37 = require("react");
3233
- var import_jsx_runtime56 = require("react/jsx-runtime");
3661
+ var import_jsx_runtime57 = require("react/jsx-runtime");
3234
3662
  function Inbox({ view, children, className, ...props }) {
3235
- return /* @__PURE__ */ (0, import_jsx_runtime56.jsx)("div", { className: cx("uix-inbox", className), "data-view": view, ...props, children });
3663
+ return /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("div", { className: cx("uix-inbox", className), "data-view": view, ...props, children });
3236
3664
  }
3237
3665
  var InboxListCtx = (0, import_react37.createContext)({});
3238
3666
  function InboxList({ children, listLabel = "Inbox", className, ...props }) {
@@ -3273,7 +3701,7 @@ function InboxList({ children, listLabel = "Inbox", className, ...props }) {
3273
3701
  setActiveId(el.id);
3274
3702
  el.scrollIntoView({ block: "nearest" });
3275
3703
  };
3276
- return /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(InboxListCtx.Provider, { value: ctx, children: /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(
3704
+ return /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(InboxListCtx.Provider, { value: ctx, children: /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(
3277
3705
  "div",
3278
3706
  {
3279
3707
  ref: listRef,
@@ -3302,7 +3730,7 @@ function InboxItem({
3302
3730
  const autoId = (0, import_react37.useId)();
3303
3731
  const itemId = id ?? autoId;
3304
3732
  const { activeId } = (0, import_react37.useContext)(InboxListCtx);
3305
- return /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)(
3733
+ return /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)(
3306
3734
  "div",
3307
3735
  {
3308
3736
  role: "option",
@@ -3314,35 +3742,35 @@ function InboxItem({
3314
3742
  ...props,
3315
3743
  children: [
3316
3744
  leading,
3317
- subject != null && /* @__PURE__ */ (0, import_jsx_runtime56.jsx)("div", { className: "uix-inbox__subject", children: subject }),
3318
- preview != null && /* @__PURE__ */ (0, import_jsx_runtime56.jsx)("div", { className: "uix-inbox__preview", children: preview }),
3745
+ subject != null && /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("div", { className: "uix-inbox__subject", children: subject }),
3746
+ preview != null && /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("div", { className: "uix-inbox__preview", children: preview }),
3319
3747
  children
3320
3748
  ]
3321
3749
  }
3322
3750
  );
3323
3751
  }
3324
3752
  function InboxDetail({ children, className, ...props }) {
3325
- return /* @__PURE__ */ (0, import_jsx_runtime56.jsx)("div", { className: cx("uix-inbox__detail", className), ...props, children });
3753
+ return /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("div", { className: cx("uix-inbox__detail", className), ...props, children });
3326
3754
  }
3327
3755
 
3328
3756
  // src/components/Kanban.tsx
3329
3757
  var import_react38 = require("react");
3330
- var import_jsx_runtime57 = require("react/jsx-runtime");
3758
+ var import_jsx_runtime58 = require("react/jsx-runtime");
3331
3759
  function Kanban({ announcement, children, className, ...props }) {
3332
- return /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)("div", { className: cx("uix-kanban", className), ...props, children: [
3333
- announcement != null && /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("div", { role: "status", className: "uix-visually-hidden", children: announcement }),
3760
+ return /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)("div", { className: cx("uix-kanban", className), ...props, children: [
3761
+ announcement != null && /* @__PURE__ */ (0, import_jsx_runtime58.jsx)("div", { role: "status", className: "uix-visually-hidden", children: announcement }),
3334
3762
  children
3335
3763
  ] });
3336
3764
  }
3337
3765
  function KanbanColumn({ title, count, children, className, ...props }) {
3338
3766
  const headId = (0, import_react38.useId)();
3339
3767
  const hasHead = title != null || count != null;
3340
- return /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)("div", { className: cx("uix-kanban__col", className), ...props, children: [
3341
- hasHead && /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)("div", { className: "uix-kanban__head", id: headId, children: [
3768
+ return /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)("div", { className: cx("uix-kanban__col", className), ...props, children: [
3769
+ hasHead && /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)("div", { className: "uix-kanban__head", id: headId, children: [
3342
3770
  title,
3343
- count != null && /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("span", { className: "uix-kanban__count", children: count })
3771
+ count != null && /* @__PURE__ */ (0, import_jsx_runtime58.jsx)("span", { className: "uix-kanban__count", children: count })
3344
3772
  ] }),
3345
- /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("div", { className: "uix-kanban__body", role: "list", "aria-labelledby": hasHead ? headId : void 0, children })
3773
+ /* @__PURE__ */ (0, import_jsx_runtime58.jsx)("div", { className: "uix-kanban__body", role: "list", "aria-labelledby": hasHead ? headId : void 0, children })
3346
3774
  ] });
3347
3775
  }
3348
3776
  var MOVE_KEYS = {
@@ -3361,7 +3789,7 @@ function KanbanCard({ title, meta, children, className, onMove, onKeyDown, ...pr
3361
3789
  onMove(dir);
3362
3790
  }
3363
3791
  };
3364
- return /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)(
3792
+ return /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)(
3365
3793
  "div",
3366
3794
  {
3367
3795
  role: "listitem",
@@ -3370,8 +3798,8 @@ function KanbanCard({ title, meta, children, className, onMove, onKeyDown, ...pr
3370
3798
  onKeyDown: handleKeyDown,
3371
3799
  ...props,
3372
3800
  children: [
3373
- title && /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("div", { className: "uix-kanban__card-title", children: title }),
3374
- meta && /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("div", { className: "uix-kanban__card-meta", children: meta }),
3801
+ title && /* @__PURE__ */ (0, import_jsx_runtime58.jsx)("div", { className: "uix-kanban__card-title", children: title }),
3802
+ meta && /* @__PURE__ */ (0, import_jsx_runtime58.jsx)("div", { className: "uix-kanban__card-meta", children: meta }),
3375
3803
  children
3376
3804
  ]
3377
3805
  }
@@ -3437,12 +3865,12 @@ function treeNav(flat, currentId, key) {
3437
3865
  }
3438
3866
 
3439
3867
  // src/components/Tree.tsx
3440
- var import_jsx_runtime58 = require("react/jsx-runtime");
3441
- var ChevronIcon2 = () => /* @__PURE__ */ (0, import_jsx_runtime58.jsx)("svg", { viewBox: "0 0 12 12", fill: "none", stroke: "currentColor", strokeWidth: 1.5, strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": "true", children: /* @__PURE__ */ (0, import_jsx_runtime58.jsx)("path", { d: "M2 4l4 4 4-4" }) });
3868
+ var import_jsx_runtime59 = require("react/jsx-runtime");
3869
+ var ChevronIcon2 = () => /* @__PURE__ */ (0, import_jsx_runtime59.jsx)("svg", { viewBox: "0 0 12 12", fill: "none", stroke: "currentColor", strokeWidth: 1.5, strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": "true", children: /* @__PURE__ */ (0, import_jsx_runtime59.jsx)("path", { d: "M2 4l4 4 4-4" }) });
3442
3870
  function TreeNode({ node, expanded, selected, selectable, tabbableId, onToggle, onSelect, onFocusNode, level = 1, rowToggles = true }) {
3443
3871
  const hasChildren = Array.isArray(node.children) && node.children.length > 0;
3444
3872
  const isExpanded = expanded.has(node.id);
3445
- return /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)(
3873
+ return /* @__PURE__ */ (0, import_jsx_runtime59.jsxs)(
3446
3874
  "li",
3447
3875
  {
3448
3876
  role: "treeitem",
@@ -3462,12 +3890,12 @@ function TreeNode({ node, expanded, selected, selectable, tabbableId, onToggle,
3462
3890
  onFocusNode(node.id);
3463
3891
  },
3464
3892
  children: [
3465
- /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)("span", { className: "uix-tree__row", children: [
3893
+ /* @__PURE__ */ (0, import_jsx_runtime59.jsxs)("span", { className: "uix-tree__row", children: [
3466
3894
  hasChildren ? (
3467
3895
  // TENSOR RX-125 (UIX-09): the chevron is its own pointer target, so a
3468
3896
  // branch can be expanded without selecting it. Keyboard users toggle with
3469
3897
  // the arrow keys on the treeitem, so it stays out of the tab order.
3470
- /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(
3898
+ /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(
3471
3899
  "button",
3472
3900
  {
3473
3901
  type: "button",
@@ -3479,14 +3907,14 @@ function TreeNode({ node, expanded, selected, selectable, tabbableId, onToggle,
3479
3907
  onToggle(node.id);
3480
3908
  onFocusNode(node.id);
3481
3909
  },
3482
- children: /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(ChevronIcon2, {})
3910
+ children: /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(ChevronIcon2, {})
3483
3911
  }
3484
3912
  )
3485
- ) : /* @__PURE__ */ (0, import_jsx_runtime58.jsx)("span", { className: "uix-tree__toggle" }),
3486
- node.icon && /* @__PURE__ */ (0, import_jsx_runtime58.jsx)("span", { "aria-hidden": "true", children: node.icon }),
3487
- /* @__PURE__ */ (0, import_jsx_runtime58.jsx)("span", { className: "uix-tree__label", children: node.label })
3913
+ ) : /* @__PURE__ */ (0, import_jsx_runtime59.jsx)("span", { className: "uix-tree__toggle" }),
3914
+ node.icon && /* @__PURE__ */ (0, import_jsx_runtime59.jsx)("span", { "aria-hidden": "true", children: node.icon }),
3915
+ /* @__PURE__ */ (0, import_jsx_runtime59.jsx)("span", { className: "uix-tree__label", children: node.label })
3488
3916
  ] }),
3489
- hasChildren && isExpanded && /* @__PURE__ */ (0, import_jsx_runtime58.jsx)("ul", { role: "group", className: "uix-tree__group", children: node.children.map((child) => /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(
3917
+ hasChildren && isExpanded && /* @__PURE__ */ (0, import_jsx_runtime59.jsx)("ul", { role: "group", className: "uix-tree__group", children: node.children.map((child) => /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(
3490
3918
  TreeNode,
3491
3919
  {
3492
3920
  node: child,
@@ -3541,7 +3969,7 @@ function Tree({
3541
3969
  const useVirtual = virtualize ?? shouldVirtualize(flat.length);
3542
3970
  const tabbableId = focusedId ?? selected ?? nodes[0]?.id;
3543
3971
  if (useVirtual) {
3544
- return /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(
3972
+ return /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(
3545
3973
  VirtualTreeView,
3546
3974
  {
3547
3975
  flat,
@@ -3619,7 +4047,7 @@ function Tree({
3619
4047
  break;
3620
4048
  }
3621
4049
  };
3622
- return /* @__PURE__ */ (0, import_jsx_runtime58.jsx)("ul", { ref: rootRef, className: cx("uix-tree", className), role: "tree", onKeyDown, ...props, children: nodes.map((node) => /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(
4050
+ return /* @__PURE__ */ (0, import_jsx_runtime59.jsx)("ul", { ref: rootRef, className: cx("uix-tree", className), role: "tree", onKeyDown, ...props, children: nodes.map((node) => /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(
3623
4051
  TreeNode,
3624
4052
  {
3625
4053
  node,
@@ -3701,7 +4129,7 @@ function VirtualTreeView({
3701
4129
  }
3702
4130
  if (act.focusId !== void 0) moveTo(act.focusId);
3703
4131
  };
3704
- return /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)(
4132
+ return /* @__PURE__ */ (0, import_jsx_runtime59.jsxs)(
3705
4133
  "ul",
3706
4134
  {
3707
4135
  ref: scrollRef,
@@ -3719,13 +4147,13 @@ function VirtualTreeView({
3719
4147
  },
3720
4148
  ...props,
3721
4149
  children: [
3722
- win.padTop > 0 && /* @__PURE__ */ (0, import_jsx_runtime58.jsx)("li", { role: "presentation", "aria-hidden": "true", style: { height: win.padTop } }),
4150
+ win.padTop > 0 && /* @__PURE__ */ (0, import_jsx_runtime59.jsx)("li", { role: "presentation", "aria-hidden": "true", style: { height: win.padTop } }),
3723
4151
  rows.map((f, i) => {
3724
4152
  const rowStyle = {
3725
4153
  height: rowHeight,
3726
4154
  paddingLeft: `calc(${Math.min(f.level - 1, 4)} * var(--uix-space-5) + ${Math.max(0, f.level - 5)} * var(--uix-space-1))`
3727
4155
  };
3728
- return /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(
4156
+ return /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(
3729
4157
  "li",
3730
4158
  {
3731
4159
  role: "treeitem",
@@ -3746,12 +4174,12 @@ function VirtualTreeView({
3746
4174
  onSelect?.(f.node.id);
3747
4175
  setFocusedId(f.node.id);
3748
4176
  },
3749
- children: /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)("span", { className: "uix-tree__row", style: rowStyle, children: [
4177
+ children: /* @__PURE__ */ (0, import_jsx_runtime59.jsxs)("span", { className: "uix-tree__row", style: rowStyle, children: [
3750
4178
  f.hasChildren ? (
3751
4179
  // TENSOR RX-125 (UIX-09): the chevron is its own pointer target, so a
3752
4180
  // branch can be expanded without selecting it. Keyboard users toggle with
3753
4181
  // the arrow keys on the treeitem, so it stays out of the tab order.
3754
- /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(
4182
+ /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(
3755
4183
  "button",
3756
4184
  {
3757
4185
  type: "button",
@@ -3763,25 +4191,25 @@ function VirtualTreeView({
3763
4191
  onToggle(f.node.id);
3764
4192
  setFocusedId(f.node.id);
3765
4193
  },
3766
- children: /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(ChevronIcon2, {})
4194
+ children: /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(ChevronIcon2, {})
3767
4195
  }
3768
4196
  )
3769
- ) : /* @__PURE__ */ (0, import_jsx_runtime58.jsx)("span", { className: "uix-tree__toggle" }),
3770
- f.node.icon && /* @__PURE__ */ (0, import_jsx_runtime58.jsx)("span", { "aria-hidden": "true", children: f.node.icon }),
3771
- /* @__PURE__ */ (0, import_jsx_runtime58.jsx)("span", { className: "uix-tree__label", children: f.node.label })
4197
+ ) : /* @__PURE__ */ (0, import_jsx_runtime59.jsx)("span", { className: "uix-tree__toggle" }),
4198
+ f.node.icon && /* @__PURE__ */ (0, import_jsx_runtime59.jsx)("span", { "aria-hidden": "true", children: f.node.icon }),
4199
+ /* @__PURE__ */ (0, import_jsx_runtime59.jsx)("span", { className: "uix-tree__label", children: f.node.label })
3772
4200
  ] })
3773
4201
  },
3774
4202
  f.node.id
3775
4203
  );
3776
4204
  }),
3777
- win.padBottom > 0 && /* @__PURE__ */ (0, import_jsx_runtime58.jsx)("li", { role: "presentation", "aria-hidden": "true", style: { height: win.padBottom } })
4205
+ win.padBottom > 0 && /* @__PURE__ */ (0, import_jsx_runtime59.jsx)("li", { role: "presentation", "aria-hidden": "true", style: { height: win.padBottom } })
3778
4206
  ]
3779
4207
  }
3780
4208
  );
3781
4209
  }
3782
4210
 
3783
4211
  // src/components/EditorialHome.tsx
3784
- var import_jsx_runtime59 = require("react/jsx-runtime");
4212
+ var import_jsx_runtime60 = require("react/jsx-runtime");
3785
4213
  function PageIntro({
3786
4214
  kicker,
3787
4215
  title,
@@ -3794,39 +4222,39 @@ function PageIntro({
3794
4222
  children,
3795
4223
  ...props
3796
4224
  }) {
3797
- return /* @__PURE__ */ (0, import_jsx_runtime59.jsxs)("section", { className: cx("uix-page-intro", className), ...props, children: [
3798
- /* @__PURE__ */ (0, import_jsx_runtime59.jsxs)("div", { children: [
3799
- kicker != null && /* @__PURE__ */ (0, import_jsx_runtime59.jsx)("p", { className: "uix-page-kicker", children: kicker }),
3800
- /* @__PURE__ */ (0, import_jsx_runtime59.jsx)("h1", { className: "uix-page-title", children: title }),
3801
- lede != null && /* @__PURE__ */ (0, import_jsx_runtime59.jsx)("p", { className: "uix-page-lede", children: lede })
4225
+ return /* @__PURE__ */ (0, import_jsx_runtime60.jsxs)("section", { className: cx("uix-page-intro", className), ...props, children: [
4226
+ /* @__PURE__ */ (0, import_jsx_runtime60.jsxs)("div", { children: [
4227
+ kicker != null && /* @__PURE__ */ (0, import_jsx_runtime60.jsx)("p", { className: "uix-page-kicker", children: kicker }),
4228
+ /* @__PURE__ */ (0, import_jsx_runtime60.jsx)("h1", { className: "uix-page-title", children: title }),
4229
+ lede != null && /* @__PURE__ */ (0, import_jsx_runtime60.jsx)("p", { className: "uix-page-lede", children: lede })
3802
4230
  ] }),
3803
- search != null && /* @__PURE__ */ (0, import_jsx_runtime59.jsxs)("div", { children: [
3804
- searchLabel != null && /* @__PURE__ */ (0, import_jsx_runtime59.jsx)("p", { className: "uix-intro-search__label", children: searchLabel }),
4231
+ search != null && /* @__PURE__ */ (0, import_jsx_runtime60.jsxs)("div", { children: [
4232
+ searchLabel != null && /* @__PURE__ */ (0, import_jsx_runtime60.jsx)("p", { className: "uix-intro-search__label", children: searchLabel }),
3805
4233
  search
3806
4234
  ] }),
3807
- shortcuts != null && /* @__PURE__ */ (0, import_jsx_runtime59.jsx)("div", { className: "uix-shortcut-grid", "aria-label": shortcutsLabel, children: shortcuts }),
4235
+ shortcuts != null && /* @__PURE__ */ (0, import_jsx_runtime60.jsx)("div", { className: "uix-shortcut-grid", "aria-label": shortcutsLabel, children: shortcuts }),
3808
4236
  children
3809
4237
  ] });
3810
4238
  }
3811
4239
  function SectionHead({ title, titleId, action, className, ...props }) {
3812
- return /* @__PURE__ */ (0, import_jsx_runtime59.jsxs)("div", { className: cx("uix-section-head", className), ...props, children: [
3813
- /* @__PURE__ */ (0, import_jsx_runtime59.jsx)("h2", { className: "uix-section-title", id: titleId, children: title }),
4240
+ return /* @__PURE__ */ (0, import_jsx_runtime60.jsxs)("div", { className: cx("uix-section-head", className), ...props, children: [
4241
+ /* @__PURE__ */ (0, import_jsx_runtime60.jsx)("h2", { className: "uix-section-title", id: titleId, children: title }),
3814
4242
  action
3815
4243
  ] });
3816
4244
  }
3817
4245
  function NoticeQueue({ icon, title, summary, meta, position, actions, className, ...props }) {
3818
- return /* @__PURE__ */ (0, import_jsx_runtime59.jsxs)("section", { className: cx("uix-notice", className), ...props, children: [
4246
+ return /* @__PURE__ */ (0, import_jsx_runtime60.jsxs)("section", { className: cx("uix-notice", className), ...props, children: [
3819
4247
  icon,
3820
- /* @__PURE__ */ (0, import_jsx_runtime59.jsxs)("div", { className: "uix-notice__content", "aria-live": "polite", children: [
3821
- /* @__PURE__ */ (0, import_jsx_runtime59.jsxs)("p", { className: "uix-notice__copy", children: [
3822
- title != null && /* @__PURE__ */ (0, import_jsx_runtime59.jsx)("strong", { children: title }),
4248
+ /* @__PURE__ */ (0, import_jsx_runtime60.jsxs)("div", { className: "uix-notice__content", "aria-live": "polite", children: [
4249
+ /* @__PURE__ */ (0, import_jsx_runtime60.jsxs)("p", { className: "uix-notice__copy", children: [
4250
+ title != null && /* @__PURE__ */ (0, import_jsx_runtime60.jsx)("strong", { children: title }),
3823
4251
  title != null && summary != null && " ",
3824
4252
  summary
3825
4253
  ] }),
3826
- meta != null && /* @__PURE__ */ (0, import_jsx_runtime59.jsx)("p", { className: "uix-notice__meta", children: meta })
4254
+ meta != null && /* @__PURE__ */ (0, import_jsx_runtime60.jsx)("p", { className: "uix-notice__meta", children: meta })
3827
4255
  ] }),
3828
- (position != null || actions != null) && /* @__PURE__ */ (0, import_jsx_runtime59.jsxs)("div", { className: "uix-notice__actions", children: [
3829
- position != null && /* @__PURE__ */ (0, import_jsx_runtime59.jsx)("span", { className: "uix-notice__position", children: position }),
4256
+ (position != null || actions != null) && /* @__PURE__ */ (0, import_jsx_runtime60.jsxs)("div", { className: "uix-notice__actions", children: [
4257
+ position != null && /* @__PURE__ */ (0, import_jsx_runtime60.jsx)("span", { className: "uix-notice__position", children: position }),
3830
4258
  actions
3831
4259
  ] })
3832
4260
  ] });
@@ -3844,8 +4272,8 @@ function FeaturedStage({
3844
4272
  className,
3845
4273
  ...props
3846
4274
  }) {
3847
- return /* @__PURE__ */ (0, import_jsx_runtime59.jsxs)("article", { className: cx("uix-featured__stage", className), ...props, children: [
3848
- /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(
4275
+ return /* @__PURE__ */ (0, import_jsx_runtime60.jsxs)("article", { className: cx("uix-featured__stage", className), ...props, children: [
4276
+ /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(
3849
4277
  "div",
3850
4278
  {
3851
4279
  className: "uix-featured__visual",
@@ -3855,32 +4283,32 @@ function FeaturedStage({
3855
4283
  children: visual
3856
4284
  }
3857
4285
  ),
3858
- /* @__PURE__ */ (0, import_jsx_runtime59.jsxs)("div", { className: "uix-featured__content", "aria-live": "polite", children: [
3859
- (eyebrow != null || ordinal != null) && /* @__PURE__ */ (0, import_jsx_runtime59.jsxs)("p", { className: "uix-featured__eyebrow", children: [
3860
- ordinal != null && /* @__PURE__ */ (0, import_jsx_runtime59.jsx)("span", { className: "uix-featured__now", children: ordinal }),
4286
+ /* @__PURE__ */ (0, import_jsx_runtime60.jsxs)("div", { className: "uix-featured__content", "aria-live": "polite", children: [
4287
+ (eyebrow != null || ordinal != null) && /* @__PURE__ */ (0, import_jsx_runtime60.jsxs)("p", { className: "uix-featured__eyebrow", children: [
4288
+ ordinal != null && /* @__PURE__ */ (0, import_jsx_runtime60.jsx)("span", { className: "uix-featured__now", children: ordinal }),
3861
4289
  eyebrow
3862
4290
  ] }),
3863
- /* @__PURE__ */ (0, import_jsx_runtime59.jsx)("h2", { className: "uix-featured__title", id: titleId, children: title }),
3864
- description != null && /* @__PURE__ */ (0, import_jsx_runtime59.jsx)("p", { className: "uix-featured__description", children: description }),
3865
- meta != null && /* @__PURE__ */ (0, import_jsx_runtime59.jsx)("p", { className: "uix-featured__meta", children: meta }),
4291
+ /* @__PURE__ */ (0, import_jsx_runtime60.jsx)("h2", { className: "uix-featured__title", id: titleId, children: title }),
4292
+ description != null && /* @__PURE__ */ (0, import_jsx_runtime60.jsx)("p", { className: "uix-featured__description", children: description }),
4293
+ meta != null && /* @__PURE__ */ (0, import_jsx_runtime60.jsx)("p", { className: "uix-featured__meta", children: meta }),
3866
4294
  action
3867
4295
  ] })
3868
4296
  ] });
3869
4297
  }
3870
4298
  function FeaturedRundown({ eyebrow, title, titleId, meta, children, className, ...props }) {
3871
- return /* @__PURE__ */ (0, import_jsx_runtime59.jsxs)("aside", { className: cx("uix-rundown", className), ...props, children: [
3872
- /* @__PURE__ */ (0, import_jsx_runtime59.jsxs)("div", { className: "uix-rundown__head", children: [
3873
- /* @__PURE__ */ (0, import_jsx_runtime59.jsxs)("div", { children: [
3874
- eyebrow != null && /* @__PURE__ */ (0, import_jsx_runtime59.jsx)("p", { className: "uix-rundown__eyebrow", children: eyebrow }),
3875
- /* @__PURE__ */ (0, import_jsx_runtime59.jsx)("h2", { className: "uix-rundown__title", id: titleId, children: title })
4299
+ return /* @__PURE__ */ (0, import_jsx_runtime60.jsxs)("aside", { className: cx("uix-rundown", className), ...props, children: [
4300
+ /* @__PURE__ */ (0, import_jsx_runtime60.jsxs)("div", { className: "uix-rundown__head", children: [
4301
+ /* @__PURE__ */ (0, import_jsx_runtime60.jsxs)("div", { children: [
4302
+ eyebrow != null && /* @__PURE__ */ (0, import_jsx_runtime60.jsx)("p", { className: "uix-rundown__eyebrow", children: eyebrow }),
4303
+ /* @__PURE__ */ (0, import_jsx_runtime60.jsx)("h2", { className: "uix-rundown__title", id: titleId, children: title })
3876
4304
  ] }),
3877
4305
  meta
3878
4306
  ] }),
3879
- /* @__PURE__ */ (0, import_jsx_runtime59.jsx)("div", { className: "uix-rundown__items", children })
4307
+ /* @__PURE__ */ (0, import_jsx_runtime60.jsx)("div", { className: "uix-rundown__items", children })
3880
4308
  ] });
3881
4309
  }
3882
4310
  function FeaturedRundownItem({ number, topic, title, selected = false, className, ...props }) {
3883
- return /* @__PURE__ */ (0, import_jsx_runtime59.jsxs)(
4311
+ return /* @__PURE__ */ (0, import_jsx_runtime60.jsxs)(
3884
4312
  "button",
3885
4313
  {
3886
4314
  type: "button",
@@ -3889,63 +4317,63 @@ function FeaturedRundownItem({ number, topic, title, selected = false, className
3889
4317
  "data-selected": selected ? "true" : "false",
3890
4318
  ...props,
3891
4319
  children: [
3892
- number != null && /* @__PURE__ */ (0, import_jsx_runtime59.jsx)("span", { className: "uix-rundown__number", children: number }),
3893
- /* @__PURE__ */ (0, import_jsx_runtime59.jsxs)("span", { children: [
3894
- topic != null && /* @__PURE__ */ (0, import_jsx_runtime59.jsx)("span", { className: "uix-rundown__topic", children: topic }),
3895
- /* @__PURE__ */ (0, import_jsx_runtime59.jsx)("span", { className: "uix-rundown__item-title", children: title })
4320
+ number != null && /* @__PURE__ */ (0, import_jsx_runtime60.jsx)("span", { className: "uix-rundown__number", children: number }),
4321
+ /* @__PURE__ */ (0, import_jsx_runtime60.jsxs)("span", { children: [
4322
+ topic != null && /* @__PURE__ */ (0, import_jsx_runtime60.jsx)("span", { className: "uix-rundown__topic", children: topic }),
4323
+ /* @__PURE__ */ (0, import_jsx_runtime60.jsx)("span", { className: "uix-rundown__item-title", children: title })
3896
4324
  ] })
3897
4325
  ]
3898
4326
  }
3899
4327
  );
3900
4328
  }
3901
4329
  function NewsLead({ meta, title, summary, className, ...props }) {
3902
- return /* @__PURE__ */ (0, import_jsx_runtime59.jsxs)("article", { className: cx("uix-news-lead", className), ...props, children: [
3903
- meta != null && /* @__PURE__ */ (0, import_jsx_runtime59.jsx)("p", { className: "uix-news-lead__meta", children: meta }),
3904
- /* @__PURE__ */ (0, import_jsx_runtime59.jsx)("h3", { className: "uix-news-lead__title", children: title }),
3905
- summary != null && /* @__PURE__ */ (0, import_jsx_runtime59.jsx)("p", { className: "uix-news-lead__summary", children: summary })
4330
+ return /* @__PURE__ */ (0, import_jsx_runtime60.jsxs)("article", { className: cx("uix-news-lead", className), ...props, children: [
4331
+ meta != null && /* @__PURE__ */ (0, import_jsx_runtime60.jsx)("p", { className: "uix-news-lead__meta", children: meta }),
4332
+ /* @__PURE__ */ (0, import_jsx_runtime60.jsx)("h3", { className: "uix-news-lead__title", children: title }),
4333
+ summary != null && /* @__PURE__ */ (0, import_jsx_runtime60.jsx)("p", { className: "uix-news-lead__summary", children: summary })
3906
4334
  ] });
3907
4335
  }
3908
4336
  function ContentList({ children, className, ...props }) {
3909
- return /* @__PURE__ */ (0, import_jsx_runtime59.jsx)("ul", { className: cx("uix-content-list", className), ...props, children });
4337
+ return /* @__PURE__ */ (0, import_jsx_runtime60.jsx)("ul", { className: cx("uix-content-list", className), ...props, children });
3910
4338
  }
3911
4339
  function ContentListItem({ title, meta, trailing, className, ...props }) {
3912
- return /* @__PURE__ */ (0, import_jsx_runtime59.jsxs)("li", { className: cx("uix-content-list__item", className), ...props, children: [
3913
- /* @__PURE__ */ (0, import_jsx_runtime59.jsxs)("div", { children: [
3914
- /* @__PURE__ */ (0, import_jsx_runtime59.jsx)("p", { className: "uix-content-list__title", children: title }),
3915
- meta != null && /* @__PURE__ */ (0, import_jsx_runtime59.jsx)("p", { className: "uix-content-list__meta", children: meta })
4340
+ return /* @__PURE__ */ (0, import_jsx_runtime60.jsxs)("li", { className: cx("uix-content-list__item", className), ...props, children: [
4341
+ /* @__PURE__ */ (0, import_jsx_runtime60.jsxs)("div", { children: [
4342
+ /* @__PURE__ */ (0, import_jsx_runtime60.jsx)("p", { className: "uix-content-list__title", children: title }),
4343
+ meta != null && /* @__PURE__ */ (0, import_jsx_runtime60.jsx)("p", { className: "uix-content-list__meta", children: meta })
3916
4344
  ] }),
3917
4345
  trailing
3918
4346
  ] });
3919
4347
  }
3920
4348
  function ResourceGrid({ children, className, ...props }) {
3921
- return /* @__PURE__ */ (0, import_jsx_runtime59.jsx)("div", { className: cx("uix-resource-grid", className), ...props, children });
4349
+ return /* @__PURE__ */ (0, import_jsx_runtime60.jsx)("div", { className: cx("uix-resource-grid", className), ...props, children });
3922
4350
  }
3923
4351
  function StatLine({ items, children, className, ...props }) {
3924
- return /* @__PURE__ */ (0, import_jsx_runtime59.jsxs)("div", { className: cx("uix-stat-line", className), ...props, children: [
3925
- items?.map((item, i) => /* @__PURE__ */ (0, import_jsx_runtime59.jsxs)("div", { className: "uix-stat-line__item", children: [
3926
- /* @__PURE__ */ (0, import_jsx_runtime59.jsx)("span", { className: "uix-stat-line__value", children: item.value }),
3927
- /* @__PURE__ */ (0, import_jsx_runtime59.jsx)("span", { className: "uix-stat-line__label", children: item.label })
4352
+ return /* @__PURE__ */ (0, import_jsx_runtime60.jsxs)("div", { className: cx("uix-stat-line", className), ...props, children: [
4353
+ items?.map((item, i) => /* @__PURE__ */ (0, import_jsx_runtime60.jsxs)("div", { className: "uix-stat-line__item", children: [
4354
+ /* @__PURE__ */ (0, import_jsx_runtime60.jsx)("span", { className: "uix-stat-line__value", children: item.value }),
4355
+ /* @__PURE__ */ (0, import_jsx_runtime60.jsx)("span", { className: "uix-stat-line__label", children: item.label })
3928
4356
  ] }, item.id ?? i)),
3929
4357
  children
3930
4358
  ] });
3931
4359
  }
3932
4360
  function EventRow({ month, day, title, meta, className, ...props }) {
3933
- return /* @__PURE__ */ (0, import_jsx_runtime59.jsxs)("div", { className: cx("uix-event-row", className), ...props, children: [
3934
- /* @__PURE__ */ (0, import_jsx_runtime59.jsxs)("div", { className: "uix-event-date", children: [
3935
- /* @__PURE__ */ (0, import_jsx_runtime59.jsx)("span", { className: "uix-event-date__month", children: month }),
3936
- /* @__PURE__ */ (0, import_jsx_runtime59.jsx)("span", { className: "uix-event-date__day", children: day })
4361
+ return /* @__PURE__ */ (0, import_jsx_runtime60.jsxs)("div", { className: cx("uix-event-row", className), ...props, children: [
4362
+ /* @__PURE__ */ (0, import_jsx_runtime60.jsxs)("div", { className: "uix-event-date", children: [
4363
+ /* @__PURE__ */ (0, import_jsx_runtime60.jsx)("span", { className: "uix-event-date__month", children: month }),
4364
+ /* @__PURE__ */ (0, import_jsx_runtime60.jsx)("span", { className: "uix-event-date__day", children: day })
3937
4365
  ] }),
3938
- /* @__PURE__ */ (0, import_jsx_runtime59.jsxs)("div", { children: [
3939
- /* @__PURE__ */ (0, import_jsx_runtime59.jsx)("p", { className: "uix-event-row__title", children: title }),
3940
- meta != null && /* @__PURE__ */ (0, import_jsx_runtime59.jsx)("p", { className: "uix-event-row__meta", children: meta })
4366
+ /* @__PURE__ */ (0, import_jsx_runtime60.jsxs)("div", { children: [
4367
+ /* @__PURE__ */ (0, import_jsx_runtime60.jsx)("p", { className: "uix-event-row__title", children: title }),
4368
+ meta != null && /* @__PURE__ */ (0, import_jsx_runtime60.jsx)("p", { className: "uix-event-row__meta", children: meta })
3941
4369
  ] })
3942
4370
  ] });
3943
4371
  }
3944
4372
  function StatusRow({ indicator, name, meta, className, ...props }) {
3945
- return /* @__PURE__ */ (0, import_jsx_runtime59.jsxs)("div", { className: cx("uix-status-row", className), ...props, children: [
4373
+ return /* @__PURE__ */ (0, import_jsx_runtime60.jsxs)("div", { className: cx("uix-status-row", className), ...props, children: [
3946
4374
  indicator,
3947
- /* @__PURE__ */ (0, import_jsx_runtime59.jsx)("span", { className: "uix-status-row__name", children: name }),
3948
- meta != null && /* @__PURE__ */ (0, import_jsx_runtime59.jsx)("span", { className: "uix-list-meta", children: meta })
4375
+ /* @__PURE__ */ (0, import_jsx_runtime60.jsx)("span", { className: "uix-status-row__name", children: name }),
4376
+ meta != null && /* @__PURE__ */ (0, import_jsx_runtime60.jsx)("span", { className: "uix-list-meta", children: meta })
3949
4377
  ] });
3950
4378
  }
3951
4379
 
@@ -4050,7 +4478,7 @@ function fillLabel(template, values) {
4050
4478
  }
4051
4479
 
4052
4480
  // src/components/RuleBuilder.tsx
4053
- var import_jsx_runtime60 = require("react/jsx-runtime");
4481
+ var import_jsx_runtime61 = require("react/jsx-runtime");
4054
4482
  var DEFAULT_RULE_BUILDER_LABELS = {
4055
4483
  region: "Rule builder",
4056
4484
  summary: "Rule summary",
@@ -4097,21 +4525,21 @@ function RuleGroupEditor({ group, depth, root, fields, operators, maxDepth, disa
4097
4525
  combinator: "and",
4098
4526
  conditions: [defaultCondition(fields, operators)]
4099
4527
  }, maxDepth));
4100
- return /* @__PURE__ */ (0, import_jsx_runtime60.jsxs)("fieldset", { className: "uix-rule-builder__group", "data-depth": depth, children: [
4101
- /* @__PURE__ */ (0, import_jsx_runtime60.jsxs)("legend", { className: "uix-rule-builder__group-heading", children: [
4102
- /* @__PURE__ */ (0, import_jsx_runtime60.jsx)("span", { children: depth === 1 ? labels.when : labels.group }),
4103
- /* @__PURE__ */ (0, import_jsx_runtime60.jsxs)("label", { children: [
4528
+ return /* @__PURE__ */ (0, import_jsx_runtime61.jsxs)("fieldset", { className: "uix-rule-builder__group", "data-depth": depth, children: [
4529
+ /* @__PURE__ */ (0, import_jsx_runtime61.jsxs)("legend", { className: "uix-rule-builder__group-heading", children: [
4530
+ /* @__PURE__ */ (0, import_jsx_runtime61.jsx)("span", { children: depth === 1 ? labels.when : labels.group }),
4531
+ /* @__PURE__ */ (0, import_jsx_runtime61.jsxs)("label", { children: [
4104
4532
  labels.match,
4105
- /* @__PURE__ */ (0, import_jsx_runtime60.jsxs)("select", { className: "uix-select uix-select--sm", value: group.combinator, disabled, onChange: (event) => updateNode(group.id, (node) => ({ ...node, combinator: event.currentTarget.value })), children: [
4106
- /* @__PURE__ */ (0, import_jsx_runtime60.jsx)("option", { value: "and", children: labels.all }),
4107
- /* @__PURE__ */ (0, import_jsx_runtime60.jsx)("option", { value: "or", children: labels.any })
4533
+ /* @__PURE__ */ (0, import_jsx_runtime61.jsxs)("select", { className: "uix-select uix-select--sm", value: group.combinator, disabled, onChange: (event) => updateNode(group.id, (node) => ({ ...node, combinator: event.currentTarget.value })), children: [
4534
+ /* @__PURE__ */ (0, import_jsx_runtime61.jsx)("option", { value: "and", children: labels.all }),
4535
+ /* @__PURE__ */ (0, import_jsx_runtime61.jsx)("option", { value: "or", children: labels.any })
4108
4536
  ] })
4109
4537
  ] })
4110
4538
  ] }),
4111
- /* @__PURE__ */ (0, import_jsx_runtime60.jsx)("div", { className: "uix-rule-builder__rows", children: group.conditions.map((node, index) => isRuleGroup(node) ? /* @__PURE__ */ (0, import_jsx_runtime60.jsxs)("div", { className: "uix-rule-builder__nested", children: [
4112
- /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(RuleGroupEditor, { ...{ group: node, depth: depth + 1, root, fields, operators, maxDepth, disabled, onRootChange, labels } }),
4113
- /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(RowControls, { labels, label: labels.itemGroup, first: index === 0, last: index === group.conditions.length - 1, disabled, onUp: () => onRootChange(moveRuleNode(root, node.id, -1)), onDown: () => onRootChange(moveRuleNode(root, node.id, 1)), onRemove: () => onRootChange(removeRuleNode(root, node.id)) })
4114
- ] }, node.id) : /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(
4539
+ /* @__PURE__ */ (0, import_jsx_runtime61.jsx)("div", { className: "uix-rule-builder__rows", children: group.conditions.map((node, index) => isRuleGroup(node) ? /* @__PURE__ */ (0, import_jsx_runtime61.jsxs)("div", { className: "uix-rule-builder__nested", children: [
4540
+ /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(RuleGroupEditor, { ...{ group: node, depth: depth + 1, root, fields, operators, maxDepth, disabled, onRootChange, labels } }),
4541
+ /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(RowControls, { labels, label: labels.itemGroup, first: index === 0, last: index === group.conditions.length - 1, disabled, onUp: () => onRootChange(moveRuleNode(root, node.id, -1)), onDown: () => onRootChange(moveRuleNode(root, node.id, 1)), onRemove: () => onRootChange(removeRuleNode(root, node.id)) })
4542
+ ] }, node.id) : /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(
4115
4543
  ConditionRow,
4116
4544
  {
4117
4545
  labels,
@@ -4120,13 +4548,13 @@ function RuleGroupEditor({ group, depth, root, fields, operators, maxDepth, disa
4120
4548
  operators,
4121
4549
  disabled,
4122
4550
  onChange: (condition) => updateNode(node.id, () => condition),
4123
- controls: /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(RowControls, { labels, label: labels.itemCondition, first: index === 0, last: index === group.conditions.length - 1, disabled, onUp: () => onRootChange(moveRuleNode(root, node.id, -1)), onDown: () => onRootChange(moveRuleNode(root, node.id, 1)), onRemove: () => onRootChange(removeRuleNode(root, node.id)) })
4551
+ controls: /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(RowControls, { labels, label: labels.itemCondition, first: index === 0, last: index === group.conditions.length - 1, disabled, onUp: () => onRootChange(moveRuleNode(root, node.id, -1)), onDown: () => onRootChange(moveRuleNode(root, node.id, 1)), onRemove: () => onRootChange(removeRuleNode(root, node.id)) })
4124
4552
  },
4125
4553
  node.id
4126
4554
  )) }),
4127
- /* @__PURE__ */ (0, import_jsx_runtime60.jsxs)("div", { className: "uix-rule-builder__add", children: [
4128
- /* @__PURE__ */ (0, import_jsx_runtime60.jsx)("button", { type: "button", className: "uix-btn uix-btn--secondary uix-btn--sm", onClick: addCondition, disabled: disabled || fields.length === 0 || operators.length === 0, children: labels.addCondition }),
4129
- /* @__PURE__ */ (0, import_jsx_runtime60.jsx)("button", { type: "button", className: "uix-btn uix-btn--ghost uix-btn--sm", onClick: addGroup, disabled: disabled || depth >= maxDepth, children: labels.addGroup })
4555
+ /* @__PURE__ */ (0, import_jsx_runtime61.jsxs)("div", { className: "uix-rule-builder__add", children: [
4556
+ /* @__PURE__ */ (0, import_jsx_runtime61.jsx)("button", { type: "button", className: "uix-btn uix-btn--secondary uix-btn--sm", onClick: addCondition, disabled: disabled || fields.length === 0 || operators.length === 0, children: labels.addCondition }),
4557
+ /* @__PURE__ */ (0, import_jsx_runtime61.jsx)("button", { type: "button", className: "uix-btn uix-btn--ghost uix-btn--sm", onClick: addGroup, disabled: disabled || depth >= maxDepth, children: labels.addGroup })
4130
4558
  ] })
4131
4559
  ] });
4132
4560
  }
@@ -4139,24 +4567,24 @@ function ConditionRow({ labels, condition, fields, operators, disabled, onChange
4139
4567
  const nextOperator = operators.find((item) => nextField?.operators?.includes(item.id)) ?? availableOperators[0] ?? operators[0];
4140
4568
  onChange({ ...condition, field: id, operator: nextOperator?.id ?? "" });
4141
4569
  };
4142
- return /* @__PURE__ */ (0, import_jsx_runtime60.jsxs)("div", { className: "uix-rule-builder__condition", children: [
4143
- /* @__PURE__ */ (0, import_jsx_runtime60.jsxs)("label", { children: [
4144
- /* @__PURE__ */ (0, import_jsx_runtime60.jsx)("span", { className: "uix-visually-hidden", children: labels.field }),
4145
- /* @__PURE__ */ (0, import_jsx_runtime60.jsx)("select", { className: "uix-select", value: condition.field, onChange: (event) => setField(event.currentTarget.value), disabled, children: fields.map((item) => /* @__PURE__ */ (0, import_jsx_runtime60.jsx)("option", { value: item.id, children: item.label }, item.id)) })
4570
+ return /* @__PURE__ */ (0, import_jsx_runtime61.jsxs)("div", { className: "uix-rule-builder__condition", children: [
4571
+ /* @__PURE__ */ (0, import_jsx_runtime61.jsxs)("label", { children: [
4572
+ /* @__PURE__ */ (0, import_jsx_runtime61.jsx)("span", { className: "uix-visually-hidden", children: labels.field }),
4573
+ /* @__PURE__ */ (0, import_jsx_runtime61.jsx)("select", { className: "uix-select", value: condition.field, onChange: (event) => setField(event.currentTarget.value), disabled, children: fields.map((item) => /* @__PURE__ */ (0, import_jsx_runtime61.jsx)("option", { value: item.id, children: item.label }, item.id)) })
4146
4574
  ] }),
4147
- /* @__PURE__ */ (0, import_jsx_runtime60.jsxs)("label", { children: [
4148
- /* @__PURE__ */ (0, import_jsx_runtime60.jsx)("span", { className: "uix-visually-hidden", children: labels.operator }),
4149
- /* @__PURE__ */ (0, import_jsx_runtime60.jsx)("select", { className: "uix-select", value: condition.operator, onChange: (event) => onChange({ ...condition, operator: event.currentTarget.value }), disabled, children: availableOperators.map((item) => /* @__PURE__ */ (0, import_jsx_runtime60.jsx)("option", { value: item.id, children: item.label }, item.id)) })
4575
+ /* @__PURE__ */ (0, import_jsx_runtime61.jsxs)("label", { children: [
4576
+ /* @__PURE__ */ (0, import_jsx_runtime61.jsx)("span", { className: "uix-visually-hidden", children: labels.operator }),
4577
+ /* @__PURE__ */ (0, import_jsx_runtime61.jsx)("select", { className: "uix-select", value: condition.operator, onChange: (event) => onChange({ ...condition, operator: event.currentTarget.value }), disabled, children: availableOperators.map((item) => /* @__PURE__ */ (0, import_jsx_runtime61.jsx)("option", { value: item.id, children: item.label }, item.id)) })
4150
4578
  ] }),
4151
- operator?.requiresValue !== false && /* @__PURE__ */ (0, import_jsx_runtime60.jsx)("div", { className: "uix-rule-builder__value", children: field?.renderValueEditor?.({ condition, onChange: (value) => onChange({ ...condition, value }), disabled }) ?? /* @__PURE__ */ (0, import_jsx_runtime60.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 }) }) }),
4579
+ operator?.requiresValue !== false && /* @__PURE__ */ (0, import_jsx_runtime61.jsx)("div", { className: "uix-rule-builder__value", children: field?.renderValueEditor?.({ condition, onChange: (value) => onChange({ ...condition, value }), disabled }) ?? /* @__PURE__ */ (0, import_jsx_runtime61.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 }) }) }),
4152
4580
  controls
4153
4581
  ] });
4154
4582
  }
4155
4583
  function RowControls({ labels, label, first, last, disabled, onUp, onDown, onRemove }) {
4156
- return /* @__PURE__ */ (0, import_jsx_runtime60.jsxs)("span", { className: "uix-rule-builder__row-actions", children: [
4157
- /* @__PURE__ */ (0, import_jsx_runtime60.jsx)("button", { type: "button", className: "uix-btn uix-btn--ghost uix-btn--sm", onClick: onUp, disabled: disabled || first, "aria-label": fillLabel(labels.moveUpNamed, { item: label }), children: labels.moveUp }),
4158
- /* @__PURE__ */ (0, import_jsx_runtime60.jsx)("button", { type: "button", className: "uix-btn uix-btn--ghost uix-btn--sm", onClick: onDown, disabled: disabled || last, "aria-label": fillLabel(labels.moveDownNamed, { item: label }), children: labels.moveDown }),
4159
- /* @__PURE__ */ (0, import_jsx_runtime60.jsx)("button", { type: "button", className: "uix-btn uix-btn--ghost uix-btn--sm", onClick: onRemove, disabled, "aria-label": fillLabel(labels.removeNamed, { item: label }), children: labels.remove })
4584
+ return /* @__PURE__ */ (0, import_jsx_runtime61.jsxs)("span", { className: "uix-rule-builder__row-actions", children: [
4585
+ /* @__PURE__ */ (0, import_jsx_runtime61.jsx)("button", { type: "button", className: "uix-btn uix-btn--ghost uix-btn--sm", onClick: onUp, disabled: disabled || first, "aria-label": fillLabel(labels.moveUpNamed, { item: label }), children: labels.moveUp }),
4586
+ /* @__PURE__ */ (0, import_jsx_runtime61.jsx)("button", { type: "button", className: "uix-btn uix-btn--ghost uix-btn--sm", onClick: onDown, disabled: disabled || last, "aria-label": fillLabel(labels.moveDownNamed, { item: label }), children: labels.moveDown }),
4587
+ /* @__PURE__ */ (0, import_jsx_runtime61.jsx)("button", { type: "button", className: "uix-btn uix-btn--ghost uix-btn--sm", onClick: onRemove, disabled, "aria-label": fillLabel(labels.removeNamed, { item: label }), children: labels.remove })
4160
4588
  ] });
4161
4589
  }
4162
4590
  function RuleBuilder({
@@ -4186,21 +4614,21 @@ function RuleBuilder({
4186
4614
  const fieldLabels = Object.fromEntries(fields.map((field) => [field.id, field.label]));
4187
4615
  const operatorLabels = Object.fromEntries(operators.map((operator) => [operator.id, operator.label]));
4188
4616
  const actionLabels = Object.fromEntries(actions.map((action) => [action.id, action.label]));
4189
- if (readOnly) return /* @__PURE__ */ (0, import_jsx_runtime60.jsxs)("section", { className: cx("uix-rule-builder uix-rule-builder--summary", className), "aria-label": labels.summary, children: [
4190
- /* @__PURE__ */ (0, import_jsx_runtime60.jsx)("p", { children: summarizeRule(value, { fields: fieldLabels, operators: operatorLabels, actions: actionLabels }) }),
4191
- issues.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime60.jsx)("p", { className: "uix-rule-builder__invalid", children: issuesText(labels.summaryIssuesOne, labels.summaryIssuesMany) })
4617
+ if (readOnly) return /* @__PURE__ */ (0, import_jsx_runtime61.jsxs)("section", { className: cx("uix-rule-builder uix-rule-builder--summary", className), "aria-label": labels.summary, children: [
4618
+ /* @__PURE__ */ (0, import_jsx_runtime61.jsx)("p", { children: summarizeRule(value, { fields: fieldLabels, operators: operatorLabels, actions: actionLabels }) }),
4619
+ issues.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime61.jsx)("p", { className: "uix-rule-builder__invalid", children: issuesText(labels.summaryIssuesOne, labels.summaryIssuesMany) })
4192
4620
  ] });
4193
4621
  const updateActions = (next) => onChange({ ...value, then: next });
4194
- return /* @__PURE__ */ (0, import_jsx_runtime60.jsxs)("section", { className: cx("uix-rule-builder", className), "aria-label": labels.region, children: [
4195
- /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(RuleGroupEditor, { group: value.when, depth: 1, root: value.when, fields, operators, maxDepth, disabled: readOnly, onRootChange: (when) => onChange({ ...value, when }), labels }),
4196
- /* @__PURE__ */ (0, import_jsx_runtime60.jsxs)("fieldset", { className: "uix-rule-builder__actions", children: [
4197
- /* @__PURE__ */ (0, import_jsx_runtime60.jsx)("legend", { children: labels.then }),
4622
+ return /* @__PURE__ */ (0, import_jsx_runtime61.jsxs)("section", { className: cx("uix-rule-builder", className), "aria-label": labels.region, children: [
4623
+ /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(RuleGroupEditor, { group: value.when, depth: 1, root: value.when, fields, operators, maxDepth, disabled: readOnly, onRootChange: (when) => onChange({ ...value, when }), labels }),
4624
+ /* @__PURE__ */ (0, import_jsx_runtime61.jsxs)("fieldset", { className: "uix-rule-builder__actions", children: [
4625
+ /* @__PURE__ */ (0, import_jsx_runtime61.jsx)("legend", { children: labels.then }),
4198
4626
  value.then.map((action, index) => {
4199
4627
  const definition = actions.find((item) => item.id === action.type);
4200
- return /* @__PURE__ */ (0, import_jsx_runtime60.jsxs)("div", { className: "uix-rule-builder__action", children: [
4201
- /* @__PURE__ */ (0, import_jsx_runtime60.jsx)("select", { className: "uix-select", value: action.type, 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__ */ (0, import_jsx_runtime60.jsx)("option", { value: item.id, children: item.label }, item.id)) }),
4628
+ return /* @__PURE__ */ (0, import_jsx_runtime61.jsxs)("div", { className: "uix-rule-builder__action", children: [
4629
+ /* @__PURE__ */ (0, import_jsx_runtime61.jsx)("select", { className: "uix-select", value: action.type, 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__ */ (0, import_jsx_runtime61.jsx)("option", { value: item.id, children: item.label }, item.id)) }),
4202
4630
  definition?.renderParameters?.(action, (parameters) => updateActions(value.then.map((item) => item.id === action.id ? { ...item, parameters } : item)), false),
4203
- /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(
4631
+ /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(
4204
4632
  RowControls,
4205
4633
  {
4206
4634
  labels,
@@ -4223,18 +4651,18 @@ function RuleBuilder({
4223
4651
  )
4224
4652
  ] }, action.id);
4225
4653
  }),
4226
- /* @__PURE__ */ (0, import_jsx_runtime60.jsx)("button", { type: "button", className: "uix-btn uix-btn--secondary uix-btn--sm", disabled: actions.length === 0, onClick: () => updateActions([...value.then, { id: nextId("action"), type: actions[0]?.id ?? "", parameters: {} }]), children: labels.addAction })
4654
+ /* @__PURE__ */ (0, import_jsx_runtime61.jsx)("button", { type: "button", className: "uix-btn uix-btn--secondary uix-btn--sm", disabled: actions.length === 0, onClick: () => updateActions([...value.then, { id: nextId("action"), type: actions[0]?.id ?? "", parameters: {} }]), children: labels.addAction })
4227
4655
  ] }),
4228
- /* @__PURE__ */ (0, import_jsx_runtime60.jsx)("div", { className: "uix-rule-builder__validation", "aria-live": "polite", children: issues.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime60.jsx)("span", { children: labels.valid }) : /* @__PURE__ */ (0, import_jsx_runtime60.jsxs)(import_jsx_runtime60.Fragment, { children: [
4229
- /* @__PURE__ */ (0, import_jsx_runtime60.jsx)("strong", { children: issuesText(labels.issuesOne, labels.issuesMany) }),
4230
- /* @__PURE__ */ (0, import_jsx_runtime60.jsx)("ul", { children: issues.map((issue, index) => /* @__PURE__ */ (0, import_jsx_runtime60.jsx)("li", { children: issue.message }, `${issue.path}-${index}`)) })
4656
+ /* @__PURE__ */ (0, import_jsx_runtime61.jsx)("div", { className: "uix-rule-builder__validation", "aria-live": "polite", children: issues.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime61.jsx)("span", { children: labels.valid }) : /* @__PURE__ */ (0, import_jsx_runtime61.jsxs)(import_jsx_runtime61.Fragment, { children: [
4657
+ /* @__PURE__ */ (0, import_jsx_runtime61.jsx)("strong", { children: issuesText(labels.issuesOne, labels.issuesMany) }),
4658
+ /* @__PURE__ */ (0, import_jsx_runtime61.jsx)("ul", { children: issues.map((issue, index) => /* @__PURE__ */ (0, import_jsx_runtime61.jsx)("li", { children: issue.message }, `${issue.path}-${index}`)) })
4231
4659
  ] }) })
4232
4660
  ] });
4233
4661
  }
4234
4662
 
4235
4663
  // src/components/BuilderCanvas.tsx
4236
4664
  var import_react40 = require("react");
4237
- var import_jsx_runtime61 = require("react/jsx-runtime");
4665
+ var import_jsx_runtime62 = require("react/jsx-runtime");
4238
4666
  var DEFAULT_BUILDER_CANVAS_LABELS = {
4239
4667
  region: "Builder canvas",
4240
4668
  palette: "Item palette",
@@ -4313,24 +4741,24 @@ function BuilderCanvas({
4313
4741
  if (from >= 0 && to >= 0) onItemsChange(reorder(items, from, to));
4314
4742
  setDraggedId(void 0);
4315
4743
  };
4316
- return /* @__PURE__ */ (0, import_jsx_runtime61.jsxs)("section", { className: cx("uix-builder-canvas", className), "aria-label": labels.region, children: [
4317
- /* @__PURE__ */ (0, import_jsx_runtime61.jsxs)("aside", { className: "uix-builder-canvas__palette", "aria-label": labels.palette, children: [
4318
- /* @__PURE__ */ (0, import_jsx_runtime61.jsx)("h3", { children: labels.paletteHeading }),
4319
- palette.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime61.jsx)("p", { children: labels.paletteEmpty }) : /* @__PURE__ */ (0, import_jsx_runtime61.jsx)("ul", { children: palette.map((item) => /* @__PURE__ */ (0, import_jsx_runtime61.jsx)("li", { children: /* @__PURE__ */ (0, import_jsx_runtime61.jsxs)("button", { type: "button", onClick: () => add(item), children: [
4320
- /* @__PURE__ */ (0, import_jsx_runtime61.jsx)("strong", { children: item.label }),
4321
- item.description && /* @__PURE__ */ (0, import_jsx_runtime61.jsx)("span", { children: item.description }),
4322
- /* @__PURE__ */ (0, import_jsx_runtime61.jsx)("span", { "aria-hidden": "true", children: labels.add })
4744
+ return /* @__PURE__ */ (0, import_jsx_runtime62.jsxs)("section", { className: cx("uix-builder-canvas", className), "aria-label": labels.region, children: [
4745
+ /* @__PURE__ */ (0, import_jsx_runtime62.jsxs)("aside", { className: "uix-builder-canvas__palette", "aria-label": labels.palette, children: [
4746
+ /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("h3", { children: labels.paletteHeading }),
4747
+ palette.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("p", { children: labels.paletteEmpty }) : /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("ul", { children: palette.map((item) => /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("li", { children: /* @__PURE__ */ (0, import_jsx_runtime62.jsxs)("button", { type: "button", onClick: () => add(item), children: [
4748
+ /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("strong", { children: item.label }),
4749
+ item.description && /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("span", { children: item.description }),
4750
+ /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("span", { "aria-hidden": "true", children: labels.add })
4323
4751
  ] }) }, item.id)) })
4324
4752
  ] }),
4325
- /* @__PURE__ */ (0, import_jsx_runtime61.jsxs)("div", { className: "uix-builder-canvas__workspace", children: [
4326
- /* @__PURE__ */ (0, import_jsx_runtime61.jsx)("h3", { children: labels.canvasHeading }),
4327
- loading ? /* @__PURE__ */ (0, import_jsx_runtime61.jsx)("div", { className: "uix-builder-canvas__state", role: "status", children: labels.loading }) : error ? /* @__PURE__ */ (0, import_jsx_runtime61.jsxs)("div", { className: "uix-builder-canvas__state", role: "alert", children: [
4328
- /* @__PURE__ */ (0, import_jsx_runtime61.jsx)("p", { children: error }),
4329
- onRetry && /* @__PURE__ */ (0, import_jsx_runtime61.jsx)("button", { type: "button", className: "uix-btn uix-btn--secondary", onClick: onRetry, children: labels.retry })
4330
- ] }) : items.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime61.jsxs)("div", { className: "uix-builder-canvas__state", children: [
4331
- /* @__PURE__ */ (0, import_jsx_runtime61.jsx)("p", { children: emptyMessage }),
4332
- palette[0] && /* @__PURE__ */ (0, import_jsx_runtime61.jsx)("button", { type: "button", className: "uix-btn uix-btn--primary", onClick: () => add(palette[0]), children: fillLabel(labels.addFirst, { label: palette[0].label }) })
4333
- ] }) : /* @__PURE__ */ (0, import_jsx_runtime61.jsx)("ol", { className: "uix-builder-canvas__items", children: items.map((item, index) => /* @__PURE__ */ (0, import_jsx_runtime61.jsxs)(
4753
+ /* @__PURE__ */ (0, import_jsx_runtime62.jsxs)("div", { className: "uix-builder-canvas__workspace", children: [
4754
+ /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("h3", { children: labels.canvasHeading }),
4755
+ loading ? /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("div", { className: "uix-builder-canvas__state", role: "status", children: labels.loading }) : error ? /* @__PURE__ */ (0, import_jsx_runtime62.jsxs)("div", { className: "uix-builder-canvas__state", role: "alert", children: [
4756
+ /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("p", { children: error }),
4757
+ onRetry && /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("button", { type: "button", className: "uix-btn uix-btn--secondary", onClick: onRetry, children: labels.retry })
4758
+ ] }) : items.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime62.jsxs)("div", { className: "uix-builder-canvas__state", children: [
4759
+ /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("p", { children: emptyMessage }),
4760
+ palette[0] && /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("button", { type: "button", className: "uix-btn uix-btn--primary", onClick: () => add(palette[0]), children: fillLabel(labels.addFirst, { label: palette[0].label }) })
4761
+ ] }) : /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("ol", { className: "uix-builder-canvas__items", children: items.map((item, index) => /* @__PURE__ */ (0, import_jsx_runtime62.jsxs)(
4334
4762
  "li",
4335
4763
  {
4336
4764
  draggable: true,
@@ -4340,27 +4768,27 @@ function BuilderCanvas({
4340
4768
  onDrop: (event) => drop(event, item.id),
4341
4769
  className: cx("uix-builder-canvas__item", selectedId === item.id && "uix-builder-canvas__item--selected"),
4342
4770
  children: [
4343
- /* @__PURE__ */ (0, import_jsx_runtime61.jsx)("button", { type: "button", className: "uix-builder-canvas__item-main", "aria-pressed": selectedId === item.id, onClick: () => select(item.id), children: renderItem?.(item, selectedId === item.id) ?? /* @__PURE__ */ (0, import_jsx_runtime61.jsxs)(import_jsx_runtime61.Fragment, { children: [
4344
- /* @__PURE__ */ (0, import_jsx_runtime61.jsx)("strong", { children: item.label }),
4345
- item.description && /* @__PURE__ */ (0, import_jsx_runtime61.jsx)("span", { children: item.description })
4771
+ /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("button", { type: "button", className: "uix-builder-canvas__item-main", "aria-pressed": selectedId === item.id, onClick: () => select(item.id), children: renderItem?.(item, selectedId === item.id) ?? /* @__PURE__ */ (0, import_jsx_runtime62.jsxs)(import_jsx_runtime62.Fragment, { children: [
4772
+ /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("strong", { children: item.label }),
4773
+ item.description && /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("span", { children: item.description })
4346
4774
  ] }) }),
4347
- /* @__PURE__ */ (0, import_jsx_runtime61.jsxs)("span", { className: "uix-builder-canvas__item-actions", children: [
4348
- /* @__PURE__ */ (0, import_jsx_runtime61.jsx)("button", { type: "button", onClick: () => move(item.id, -1), disabled: index === 0, "aria-label": fillLabel(labels.moveUpNamed, { label: item.label }), children: labels.moveUp }),
4349
- /* @__PURE__ */ (0, import_jsx_runtime61.jsx)("button", { type: "button", onClick: () => move(item.id, 1), disabled: index === items.length - 1, "aria-label": fillLabel(labels.moveDownNamed, { label: item.label }), children: labels.moveDown }),
4350
- /* @__PURE__ */ (0, import_jsx_runtime61.jsx)("button", { type: "button", onClick: () => remove(item.id), "aria-label": fillLabel(labels.removeNamed, { label: item.label }), children: labels.remove })
4775
+ /* @__PURE__ */ (0, import_jsx_runtime62.jsxs)("span", { className: "uix-builder-canvas__item-actions", children: [
4776
+ /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("button", { type: "button", onClick: () => move(item.id, -1), disabled: index === 0, "aria-label": fillLabel(labels.moveUpNamed, { label: item.label }), children: labels.moveUp }),
4777
+ /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("button", { type: "button", onClick: () => move(item.id, 1), disabled: index === items.length - 1, "aria-label": fillLabel(labels.moveDownNamed, { label: item.label }), children: labels.moveDown }),
4778
+ /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("button", { type: "button", onClick: () => remove(item.id), "aria-label": fillLabel(labels.removeNamed, { label: item.label }), children: labels.remove })
4351
4779
  ] })
4352
4780
  ]
4353
4781
  },
4354
4782
  item.id
4355
4783
  )) })
4356
4784
  ] }),
4357
- /* @__PURE__ */ (0, import_jsx_runtime61.jsxs)("aside", { className: "uix-builder-canvas__properties", "aria-label": labels.properties, children: [
4358
- /* @__PURE__ */ (0, import_jsx_runtime61.jsx)("h3", { ref: propertyHeadingRef, tabIndex: -1, children: labels.propertiesHeading }),
4359
- !selected ? /* @__PURE__ */ (0, import_jsx_runtime61.jsx)("p", { children: labels.propertiesEmpty }) : renderProperties?.(selected, (updated) => onItemsChange(items.map((item) => item.id === updated.id ? updated : item))) ?? /* @__PURE__ */ (0, import_jsx_runtime61.jsxs)("dl", { children: [
4360
- /* @__PURE__ */ (0, import_jsx_runtime61.jsx)("dt", { children: labels.type }),
4361
- /* @__PURE__ */ (0, import_jsx_runtime61.jsx)("dd", { children: selected.type }),
4362
- /* @__PURE__ */ (0, import_jsx_runtime61.jsx)("dt", { children: labels.label }),
4363
- /* @__PURE__ */ (0, import_jsx_runtime61.jsx)("dd", { children: selected.label })
4785
+ /* @__PURE__ */ (0, import_jsx_runtime62.jsxs)("aside", { className: "uix-builder-canvas__properties", "aria-label": labels.properties, children: [
4786
+ /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("h3", { ref: propertyHeadingRef, tabIndex: -1, children: labels.propertiesHeading }),
4787
+ !selected ? /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("p", { children: labels.propertiesEmpty }) : renderProperties?.(selected, (updated) => onItemsChange(items.map((item) => item.id === updated.id ? updated : item))) ?? /* @__PURE__ */ (0, import_jsx_runtime62.jsxs)("dl", { children: [
4788
+ /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("dt", { children: labels.type }),
4789
+ /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("dd", { children: selected.type }),
4790
+ /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("dt", { children: labels.label }),
4791
+ /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("dd", { children: selected.label })
4364
4792
  ] })
4365
4793
  ] })
4366
4794
  ] });
@@ -4448,7 +4876,7 @@ function isDateUnavailable(date, options) {
4448
4876
  }
4449
4877
 
4450
4878
  // src/components/SchedulingCalendar.tsx
4451
- var import_jsx_runtime62 = require("react/jsx-runtime");
4879
+ var import_jsx_runtime63 = require("react/jsx-runtime");
4452
4880
  var DEFAULT_SCHEDULING_CALENDAR_LABELS = {
4453
4881
  region: "Scheduling calendar in {timeZone}",
4454
4882
  previous: "Previous",
@@ -4540,55 +4968,55 @@ function SchedulingCalendar({
4540
4968
  return date >= span.start && date <= span.end;
4541
4969
  });
4542
4970
  const formatInstant = (instant) => new Intl.DateTimeFormat(locale, { timeZone, dateStyle: "medium", timeStyle: "short" }).format(new Date(instant));
4543
- return /* @__PURE__ */ (0, import_jsx_runtime62.jsxs)("section", { className: cx("uix-scheduling-calendar", className), "aria-label": fillLabel(labels.region, { timeZone }), children: [
4544
- /* @__PURE__ */ (0, import_jsx_runtime62.jsxs)("div", { className: "uix-scheduling-calendar__header", children: [
4545
- /* @__PURE__ */ (0, import_jsx_runtime62.jsxs)("div", { children: [
4546
- /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("button", { type: "button", className: "uix-btn uix-btn--ghost uix-btn--sm", onClick: () => movePeriod(-1), disabled: !onAnchorDateChange, children: labels.previous }),
4547
- /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("button", { type: "button", className: "uix-btn uix-btn--ghost uix-btn--sm", onClick: () => movePeriod(1), disabled: !onAnchorDateChange, children: labels.next })
4971
+ return /* @__PURE__ */ (0, import_jsx_runtime63.jsxs)("section", { className: cx("uix-scheduling-calendar", className), "aria-label": fillLabel(labels.region, { timeZone }), children: [
4972
+ /* @__PURE__ */ (0, import_jsx_runtime63.jsxs)("div", { className: "uix-scheduling-calendar__header", children: [
4973
+ /* @__PURE__ */ (0, import_jsx_runtime63.jsxs)("div", { children: [
4974
+ /* @__PURE__ */ (0, import_jsx_runtime63.jsx)("button", { type: "button", className: "uix-btn uix-btn--ghost uix-btn--sm", onClick: () => movePeriod(-1), disabled: !onAnchorDateChange, children: labels.previous }),
4975
+ /* @__PURE__ */ (0, import_jsx_runtime63.jsx)("button", { type: "button", className: "uix-btn uix-btn--ghost uix-btn--sm", onClick: () => movePeriod(1), disabled: !onAnchorDateChange, children: labels.next })
4548
4976
  ] }),
4549
- /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("strong", { children: view === "month" ? new Intl.DateTimeFormat(locale, { month: "long", year: "numeric", timeZone: "UTC" }).format(/* @__PURE__ */ new Date(`${anchorDate}T00:00:00Z`)) : `${dateLabel(weekStart, locale)} \u2013 ${dateLabel(weekDays[weekDays.length - 1], locale)}` }),
4550
- /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("div", { className: "uix-segmented", role: "group", "aria-label": labels.viewGroup, children: ["month", "week", "agenda"].map((option) => /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("button", { type: "button", className: "uix-segmented__option", "aria-pressed": view === option, "data-selected": view === option || void 0, onClick: () => setView(option), children: viewLabel[option] }, option)) })
4977
+ /* @__PURE__ */ (0, import_jsx_runtime63.jsx)("strong", { children: view === "month" ? new Intl.DateTimeFormat(locale, { month: "long", year: "numeric", timeZone: "UTC" }).format(/* @__PURE__ */ new Date(`${anchorDate}T00:00:00Z`)) : `${dateLabel(weekStart, locale)} \u2013 ${dateLabel(weekDays[weekDays.length - 1], locale)}` }),
4978
+ /* @__PURE__ */ (0, import_jsx_runtime63.jsx)("div", { className: "uix-segmented", role: "group", "aria-label": labels.viewGroup, children: ["month", "week", "agenda"].map((option) => /* @__PURE__ */ (0, import_jsx_runtime63.jsx)("button", { type: "button", className: "uix-segmented__option", "aria-pressed": view === option, "data-selected": view === option || void 0, onClick: () => setView(option), children: viewLabel[option] }, option)) })
4551
4979
  ] }),
4552
- loading ? /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("div", { className: "uix-scheduling-calendar__state", role: "status", children: labels.loading }) : error ? /* @__PURE__ */ (0, import_jsx_runtime62.jsxs)("div", { className: "uix-scheduling-calendar__state", role: "alert", children: [
4553
- /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("p", { children: error }),
4554
- onRetry && /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("button", { type: "button", className: "uix-btn uix-btn--secondary", onClick: onRetry, children: labels.retry })
4555
- ] }) : view === "agenda" ? /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("div", { className: "uix-scheduling-calendar__agenda", role: "region", "aria-label": labels.agenda, children: visibleEntries.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("p", { children: labels.agendaEmpty }) : /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("ol", { children: [...visibleEntries].sort((a, b) => a.start.localeCompare(b.start)).map((entry) => {
4980
+ loading ? /* @__PURE__ */ (0, import_jsx_runtime63.jsx)("div", { className: "uix-scheduling-calendar__state", role: "status", children: labels.loading }) : error ? /* @__PURE__ */ (0, import_jsx_runtime63.jsxs)("div", { className: "uix-scheduling-calendar__state", role: "alert", children: [
4981
+ /* @__PURE__ */ (0, import_jsx_runtime63.jsx)("p", { children: error }),
4982
+ onRetry && /* @__PURE__ */ (0, import_jsx_runtime63.jsx)("button", { type: "button", className: "uix-btn uix-btn--secondary", onClick: onRetry, children: labels.retry })
4983
+ ] }) : view === "agenda" ? /* @__PURE__ */ (0, import_jsx_runtime63.jsx)("div", { className: "uix-scheduling-calendar__agenda", role: "region", "aria-label": labels.agenda, children: visibleEntries.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime63.jsx)("p", { children: labels.agendaEmpty }) : /* @__PURE__ */ (0, import_jsx_runtime63.jsx)("ol", { children: [...visibleEntries].sort((a, b) => a.start.localeCompare(b.start)).map((entry) => {
4556
4984
  const state = entry.state ?? "scheduled";
4557
- return /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("li", { children: /* @__PURE__ */ (0, import_jsx_runtime62.jsxs)("button", { type: "button", onClick: () => onSelectEntry?.(entry), children: [
4558
- /* @__PURE__ */ (0, import_jsx_runtime62.jsxs)("span", { children: [
4559
- /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("strong", { children: renderEntry?.(entry) ?? entry.title }),
4560
- /* @__PURE__ */ (0, import_jsx_runtime62.jsxs)("span", { children: [
4985
+ return /* @__PURE__ */ (0, import_jsx_runtime63.jsx)("li", { children: /* @__PURE__ */ (0, import_jsx_runtime63.jsxs)("button", { type: "button", onClick: () => onSelectEntry?.(entry), children: [
4986
+ /* @__PURE__ */ (0, import_jsx_runtime63.jsxs)("span", { children: [
4987
+ /* @__PURE__ */ (0, import_jsx_runtime63.jsx)("strong", { children: renderEntry?.(entry) ?? entry.title }),
4988
+ /* @__PURE__ */ (0, import_jsx_runtime63.jsxs)("span", { children: [
4561
4989
  formatInstant(entry.start),
4562
4990
  " \u2013 ",
4563
4991
  formatInstant(entry.end)
4564
4992
  ] }),
4565
- entry.meta && /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("span", { children: entry.meta })
4993
+ entry.meta && /* @__PURE__ */ (0, import_jsx_runtime63.jsx)("span", { children: entry.meta })
4566
4994
  ] }),
4567
- /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(StatusPill, { tone: stateTone(state), children: stateLabel[state] })
4995
+ /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(StatusPill, { tone: stateTone(state), children: stateLabel[state] })
4568
4996
  ] }) }, entry.id);
4569
- }) }) }) : /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("div", { ref: gridRef, className: cx("uix-scheduling-calendar__grid", view === "week" && "uix-scheduling-calendar__grid--week"), role: "group", "aria-label": fillLabel(labels.grid, { view: viewLabel[view] }), children: days.map((date, index) => {
4997
+ }) }) }) : /* @__PURE__ */ (0, import_jsx_runtime63.jsx)("div", { ref: gridRef, className: cx("uix-scheduling-calendar__grid", view === "week" && "uix-scheduling-calendar__grid--week"), role: "group", "aria-label": fillLabel(labels.grid, { view: viewLabel[view] }), children: days.map((date, index) => {
4570
4998
  const dayEntries = entriesFor(date);
4571
4999
  const dayOverlays = overlaysFor(date);
4572
- return /* @__PURE__ */ (0, import_jsx_runtime62.jsxs)("div", { className: "uix-scheduling-calendar__day", "data-outside": view === "month" && !monthDays[index].inMonth || void 0, children: [
4573
- /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("button", { type: "button", className: "uix-scheduling-calendar__date", "data-calendar-date": date, tabIndex: activeDate === date ? 0 : -1, onFocus: () => setActiveDate(date), onKeyDown: (event) => onDayKeyDown(event, date), "aria-label": dateLabel(date, locale), children: Number(date.slice(-2)) }),
4574
- dayOverlays.map((overlay) => /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("span", { className: "uix-scheduling-calendar__overlay", "data-kind": overlay.kind, children: overlay.label }, overlay.id)),
4575
- /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("div", { className: "uix-scheduling-calendar__entries", children: dayEntries.map((entry) => {
5000
+ return /* @__PURE__ */ (0, import_jsx_runtime63.jsxs)("div", { className: "uix-scheduling-calendar__day", "data-outside": view === "month" && !monthDays[index].inMonth || void 0, children: [
5001
+ /* @__PURE__ */ (0, import_jsx_runtime63.jsx)("button", { type: "button", className: "uix-scheduling-calendar__date", "data-calendar-date": date, tabIndex: activeDate === date ? 0 : -1, onFocus: () => setActiveDate(date), onKeyDown: (event) => onDayKeyDown(event, date), "aria-label": dateLabel(date, locale), children: Number(date.slice(-2)) }),
5002
+ dayOverlays.map((overlay) => /* @__PURE__ */ (0, import_jsx_runtime63.jsx)("span", { className: "uix-scheduling-calendar__overlay", "data-kind": overlay.kind, children: overlay.label }, overlay.id)),
5003
+ /* @__PURE__ */ (0, import_jsx_runtime63.jsx)("div", { className: "uix-scheduling-calendar__entries", children: dayEntries.map((entry) => {
4576
5004
  const span = entrySpans.get(entry.id);
4577
5005
  const state = entry.state ?? "scheduled";
4578
- return /* @__PURE__ */ (0, import_jsx_runtime62.jsxs)("button", { type: "button", className: "uix-scheduling-calendar__entry", "data-state": state, "data-range-start": date === span.start || void 0, "data-range-end": date === span.end || void 0, onClick: () => onSelectEntry?.(entry), "aria-label": fillLabel(labels.entry, { title: entry.title, state: stateLabel[state], start: formatInstant(entry.start), end: formatInstant(entry.end) }), children: [
4579
- /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("span", { children: renderEntry?.(entry) ?? entry.title }),
4580
- /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("span", { className: "uix-visually-hidden", children: stateLabel[state] })
5006
+ return /* @__PURE__ */ (0, import_jsx_runtime63.jsxs)("button", { type: "button", className: "uix-scheduling-calendar__entry", "data-state": state, "data-range-start": date === span.start || void 0, "data-range-end": date === span.end || void 0, onClick: () => onSelectEntry?.(entry), "aria-label": fillLabel(labels.entry, { title: entry.title, state: stateLabel[state], start: formatInstant(entry.start), end: formatInstant(entry.end) }), children: [
5007
+ /* @__PURE__ */ (0, import_jsx_runtime63.jsx)("span", { children: renderEntry?.(entry) ?? entry.title }),
5008
+ /* @__PURE__ */ (0, import_jsx_runtime63.jsx)("span", { className: "uix-visually-hidden", children: stateLabel[state] })
4581
5009
  ] }, entry.id);
4582
5010
  }) })
4583
5011
  ] }, date);
4584
5012
  }) }),
4585
- /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("div", { className: "uix-scheduling-calendar__legend", "aria-label": labels.legend, children: ["scheduled", "conflicted", "in-progress", "blackout-violation"].map((state) => /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("span", { "data-state": state, children: stateLabel[state] }, state)) })
5013
+ /* @__PURE__ */ (0, import_jsx_runtime63.jsx)("div", { className: "uix-scheduling-calendar__legend", "aria-label": labels.legend, children: ["scheduled", "conflicted", "in-progress", "blackout-violation"].map((state) => /* @__PURE__ */ (0, import_jsx_runtime63.jsx)("span", { "data-state": state, children: stateLabel[state] }, state)) })
4586
5014
  ] });
4587
5015
  }
4588
5016
 
4589
5017
  // src/components/DateRangePicker.tsx
4590
5018
  var import_react42 = require("react");
4591
- var import_jsx_runtime63 = require("react/jsx-runtime");
5019
+ var import_jsx_runtime64 = require("react/jsx-runtime");
4592
5020
  var DEFAULT_DATE_RANGE_PICKER_LABELS = {
4593
5021
  previous: "Previous",
4594
5022
  previousMonth: "Show previous month",
@@ -4682,23 +5110,23 @@ function DateRangePicker({
4682
5110
  }
4683
5111
  };
4684
5112
  const announcement = !value.start ? labels.noneSelected : !value.end ? labels.startSelected.replace("{start}", dateLabel2(value.start, locale)) : labels.rangeSelected.replace("{start}", dateLabel2(value.start, locale)).replace("{end}", dateLabel2(value.end, locale));
4685
- return /* @__PURE__ */ (0, import_jsx_runtime63.jsxs)("section", { className: cx("uix-date-range-picker", rangeInvalid && "uix-date-range-picker--invalid", className), "aria-labelledby": `${id}-label`, children: [
4686
- /* @__PURE__ */ (0, import_jsx_runtime63.jsxs)("div", { className: "uix-date-range-picker__header", children: [
4687
- /* @__PURE__ */ (0, import_jsx_runtime63.jsx)("h3", { id: `${id}-label`, children: label }),
4688
- /* @__PURE__ */ (0, import_jsx_runtime63.jsxs)("div", { children: [
4689
- /* @__PURE__ */ (0, import_jsx_runtime63.jsx)("button", { type: "button", className: "uix-btn uix-btn--ghost uix-btn--sm", onClick: () => setMonth(addCalendarMonths(visibleMonth, -1)), "aria-label": labels.previousMonth, children: labels.previous }),
4690
- /* @__PURE__ */ (0, import_jsx_runtime63.jsx)("button", { type: "button", className: "uix-btn uix-btn--ghost uix-btn--sm", onClick: () => setMonth(addCalendarMonths(visibleMonth, 1)), "aria-label": labels.nextMonth, children: labels.next })
5113
+ return /* @__PURE__ */ (0, import_jsx_runtime64.jsxs)("section", { className: cx("uix-date-range-picker", rangeInvalid && "uix-date-range-picker--invalid", className), "aria-labelledby": `${id}-label`, children: [
5114
+ /* @__PURE__ */ (0, import_jsx_runtime64.jsxs)("div", { className: "uix-date-range-picker__header", children: [
5115
+ /* @__PURE__ */ (0, import_jsx_runtime64.jsx)("h3", { id: `${id}-label`, children: label }),
5116
+ /* @__PURE__ */ (0, import_jsx_runtime64.jsxs)("div", { children: [
5117
+ /* @__PURE__ */ (0, import_jsx_runtime64.jsx)("button", { type: "button", className: "uix-btn uix-btn--ghost uix-btn--sm", onClick: () => setMonth(addCalendarMonths(visibleMonth, -1)), "aria-label": labels.previousMonth, children: labels.previous }),
5118
+ /* @__PURE__ */ (0, import_jsx_runtime64.jsx)("button", { type: "button", className: "uix-btn uix-btn--ghost uix-btn--sm", onClick: () => setMonth(addCalendarMonths(visibleMonth, 1)), "aria-label": labels.nextMonth, children: labels.next })
4691
5119
  ] })
4692
5120
  ] }),
4693
- /* @__PURE__ */ (0, import_jsx_runtime63.jsx)("div", { ref: rootRef, className: "uix-date-range-picker__months", children: calendars.map(({ month, days }) => /* @__PURE__ */ (0, import_jsx_runtime63.jsxs)("div", { className: "uix-date-range-picker__month", children: [
4694
- /* @__PURE__ */ (0, import_jsx_runtime63.jsx)("h4", { children: monthLabel(month, locale) }),
4695
- /* @__PURE__ */ (0, import_jsx_runtime63.jsx)("div", { className: "uix-date-range-picker__weekdays", "aria-hidden": "true", children: weekdays.map((day, index) => /* @__PURE__ */ (0, import_jsx_runtime63.jsx)("span", { children: day }, index)) }),
4696
- /* @__PURE__ */ (0, import_jsx_runtime63.jsxs)("div", { className: "uix-date-range-picker__grid", role: "group", "aria-label": monthLabel(month, locale), children: [
4697
- Array.from({ length: ((/* @__PURE__ */ new Date(`${month}T00:00:00Z`)).getUTCDay() + 6) % 7 }, (_, index) => /* @__PURE__ */ (0, import_jsx_runtime63.jsx)("span", { "aria-hidden": "true" }, `blank-${index}`)),
5121
+ /* @__PURE__ */ (0, import_jsx_runtime64.jsx)("div", { ref: rootRef, className: "uix-date-range-picker__months", children: calendars.map(({ month, days }) => /* @__PURE__ */ (0, import_jsx_runtime64.jsxs)("div", { className: "uix-date-range-picker__month", children: [
5122
+ /* @__PURE__ */ (0, import_jsx_runtime64.jsx)("h4", { children: monthLabel(month, locale) }),
5123
+ /* @__PURE__ */ (0, import_jsx_runtime64.jsx)("div", { className: "uix-date-range-picker__weekdays", "aria-hidden": "true", children: weekdays.map((day, index) => /* @__PURE__ */ (0, import_jsx_runtime64.jsx)("span", { children: day }, index)) }),
5124
+ /* @__PURE__ */ (0, import_jsx_runtime64.jsxs)("div", { className: "uix-date-range-picker__grid", role: "group", "aria-label": monthLabel(month, locale), children: [
5125
+ Array.from({ length: ((/* @__PURE__ */ new Date(`${month}T00:00:00Z`)).getUTCDay() + 6) % 7 }, (_, index) => /* @__PURE__ */ (0, import_jsx_runtime64.jsx)("span", { "aria-hidden": "true" }, `blank-${index}`)),
4698
5126
  days.map((day) => {
4699
5127
  const unavailable = disabled || isDateUnavailable(day.date, { min, max, isDisabled: isDateDisabled });
4700
5128
  const edge = day.date === value.start ? "start" : day.date === value.end ? "end" : void 0;
4701
- return /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(
5129
+ return /* @__PURE__ */ (0, import_jsx_runtime64.jsx)(
4702
5130
  "button",
4703
5131
  {
4704
5132
  type: "button",
@@ -4719,8 +5147,8 @@ function DateRangePicker({
4719
5147
  })
4720
5148
  ] })
4721
5149
  ] }, month)) }),
4722
- /* @__PURE__ */ (0, import_jsx_runtime63.jsx)("p", { className: "uix-date-range-picker__selection", "aria-live": "polite", children: announcement }),
4723
- rangeInvalid && /* @__PURE__ */ (0, import_jsx_runtime63.jsx)("p", { className: "uix-field__error", role: "alert", children: invalidMessage })
5150
+ /* @__PURE__ */ (0, import_jsx_runtime64.jsx)("p", { className: "uix-date-range-picker__selection", "aria-live": "polite", children: announcement }),
5151
+ rangeInvalid && /* @__PURE__ */ (0, import_jsx_runtime64.jsx)("p", { className: "uix-field__error", role: "alert", children: invalidMessage })
4724
5152
  ] });
4725
5153
  }
4726
5154
 
@@ -5209,7 +5637,7 @@ function layeredNeighbor(layout, currentId, key) {
5209
5637
  var import_react43 = require("react");
5210
5638
 
5211
5639
  // src/components/RelationshipGraphList.tsx
5212
- var import_jsx_runtime64 = require("react/jsx-runtime");
5640
+ var import_jsx_runtime65 = require("react/jsx-runtime");
5213
5641
  function EquivalentRelationshipList({
5214
5642
  nodes,
5215
5643
  edges,
@@ -5220,19 +5648,19 @@ function EquivalentRelationshipList({
5220
5648
  onOpenDetails
5221
5649
  }) {
5222
5650
  const labelById = new Map(nodes.map((node) => [node.id, node.label]));
5223
- return /* @__PURE__ */ (0, import_jsx_runtime64.jsxs)("div", { className: "uix-relationship-graph__list", role: "region", "aria-label": labels.list, children: [
5224
- /* @__PURE__ */ (0, import_jsx_runtime64.jsx)("h3", { children: labels.listHeading }),
5225
- /* @__PURE__ */ (0, import_jsx_runtime64.jsx)("ul", { children: nodes.map((node) => {
5651
+ return /* @__PURE__ */ (0, import_jsx_runtime65.jsxs)("div", { className: "uix-relationship-graph__list", role: "region", "aria-label": labels.list, children: [
5652
+ /* @__PURE__ */ (0, import_jsx_runtime65.jsx)("h3", { children: labels.listHeading }),
5653
+ /* @__PURE__ */ (0, import_jsx_runtime65.jsx)("ul", { children: nodes.map((node) => {
5226
5654
  const neighbors = relationshipNeighbors(node.id, edges).map((id) => labelById.get(id) ?? id);
5227
- return /* @__PURE__ */ (0, import_jsx_runtime64.jsxs)("li", { "data-selected": selectedId === node.id || void 0, children: [
5228
- /* @__PURE__ */ (0, import_jsx_runtime64.jsxs)("button", { type: "button", onClick: () => onSelect(node.id), "aria-pressed": selectedId === node.id, children: [
5229
- /* @__PURE__ */ (0, import_jsx_runtime64.jsx)("strong", { children: node.label }),
5230
- node.type && /* @__PURE__ */ (0, import_jsx_runtime64.jsx)("span", { children: node.type }),
5231
- /* @__PURE__ */ (0, import_jsx_runtime64.jsx)("span", { children: neighbors.length ? labels.connectedTo(neighbors.join(", ")) : labels.noConnections })
5655
+ return /* @__PURE__ */ (0, import_jsx_runtime65.jsxs)("li", { "data-selected": selectedId === node.id || void 0, children: [
5656
+ /* @__PURE__ */ (0, import_jsx_runtime65.jsxs)("button", { type: "button", onClick: () => onSelect(node.id), "aria-pressed": selectedId === node.id, children: [
5657
+ /* @__PURE__ */ (0, import_jsx_runtime65.jsx)("strong", { children: node.label }),
5658
+ node.type && /* @__PURE__ */ (0, import_jsx_runtime65.jsx)("span", { children: node.type }),
5659
+ /* @__PURE__ */ (0, import_jsx_runtime65.jsx)("span", { children: neighbors.length ? labels.connectedTo(neighbors.join(", ")) : labels.noConnections })
5232
5660
  ] }),
5233
- /* @__PURE__ */ (0, import_jsx_runtime64.jsxs)("span", { className: "uix-relationship-graph__list-actions", children: [
5234
- onExpandNeighbors && /* @__PURE__ */ (0, import_jsx_runtime64.jsx)("button", { type: "button", onClick: () => onExpandNeighbors(node), children: labels.expandNeighbors }),
5235
- onOpenDetails && /* @__PURE__ */ (0, import_jsx_runtime64.jsx)("button", { type: "button", onClick: () => onOpenDetails(node), children: labels.openDetails })
5661
+ /* @__PURE__ */ (0, import_jsx_runtime65.jsxs)("span", { className: "uix-relationship-graph__list-actions", children: [
5662
+ onExpandNeighbors && /* @__PURE__ */ (0, import_jsx_runtime65.jsx)("button", { type: "button", onClick: () => onExpandNeighbors(node), children: labels.expandNeighbors }),
5663
+ onOpenDetails && /* @__PURE__ */ (0, import_jsx_runtime65.jsx)("button", { type: "button", onClick: () => onOpenDetails(node), children: labels.openDetails })
5236
5664
  ] })
5237
5665
  ] }, node.id);
5238
5666
  }) })
@@ -5240,7 +5668,7 @@ function EquivalentRelationshipList({
5240
5668
  }
5241
5669
 
5242
5670
  // src/components/RelationshipGraphLayered.tsx
5243
- var import_jsx_runtime65 = require("react/jsx-runtime");
5671
+ var import_jsx_runtime66 = require("react/jsx-runtime");
5244
5672
  var EMPTY_IDS = /* @__PURE__ */ new Set();
5245
5673
  var MIN_ZOOM = 0.4;
5246
5674
  var MAX_ZOOM = 1.5;
@@ -5513,21 +5941,21 @@ function LayeredRelationshipGraph({
5513
5941
  height: layout.height,
5514
5942
  transform: `translate(${view.x}px, ${view.y}px) scale(${view.zoom})`
5515
5943
  };
5516
- return /* @__PURE__ */ (0, import_jsx_runtime65.jsxs)("section", { className: cx("uix-relationship-graph", "uix-relationship-graph--layered", density === "compact" && "uix-relationship-graph--compact", className), "aria-label": labels.graph, children: [
5517
- /* @__PURE__ */ (0, import_jsx_runtime65.jsxs)("div", { className: "uix-relationship-graph__toolbar", role: "group", "aria-label": labels.controls, children: [
5518
- /* @__PURE__ */ (0, import_jsx_runtime65.jsx)("button", { type: "button", onClick: () => zoomBy(ZOOM_STEP), disabled: view.zoom >= MAX_ZOOM, children: labels.zoomIn }),
5519
- /* @__PURE__ */ (0, import_jsx_runtime65.jsx)("button", { type: "button", onClick: () => zoomBy(1 / ZOOM_STEP), disabled: view.zoom <= MIN_ZOOM, children: labels.zoomOut }),
5520
- /* @__PURE__ */ (0, import_jsx_runtime65.jsx)("button", { type: "button", onClick: () => moveView(fitView(layout, size), true), children: labels.fit }),
5521
- /* @__PURE__ */ (0, import_jsx_runtime65.jsx)("button", { type: "button", onClick: () => moveView(initialView(layout, size), true), children: labels.reset }),
5522
- /* @__PURE__ */ (0, import_jsx_runtime65.jsx)("button", { type: "button", onClick: () => panBy(PAN_STEP, 0), "aria-label": labels.panLeft, children: labels.left }),
5523
- /* @__PURE__ */ (0, import_jsx_runtime65.jsx)("button", { type: "button", onClick: () => panBy(0, PAN_STEP), "aria-label": labels.panUp, children: labels.up }),
5524
- /* @__PURE__ */ (0, import_jsx_runtime65.jsx)("button", { type: "button", onClick: () => panBy(0, -PAN_STEP), "aria-label": labels.panDown, children: labels.down }),
5525
- /* @__PURE__ */ (0, import_jsx_runtime65.jsx)("button", { type: "button", onClick: () => panBy(-PAN_STEP, 0), "aria-label": labels.panRight, children: labels.right }),
5526
- /* @__PURE__ */ (0, import_jsx_runtime65.jsx)("span", { "aria-live": "polite", children: labels.zoomLevel(Math.round(view.zoom * 100)) })
5944
+ return /* @__PURE__ */ (0, import_jsx_runtime66.jsxs)("section", { className: cx("uix-relationship-graph", "uix-relationship-graph--layered", density === "compact" && "uix-relationship-graph--compact", className), "aria-label": labels.graph, children: [
5945
+ /* @__PURE__ */ (0, import_jsx_runtime66.jsxs)("div", { className: "uix-relationship-graph__toolbar", role: "group", "aria-label": labels.controls, children: [
5946
+ /* @__PURE__ */ (0, import_jsx_runtime66.jsx)("button", { type: "button", onClick: () => zoomBy(ZOOM_STEP), disabled: view.zoom >= MAX_ZOOM, children: labels.zoomIn }),
5947
+ /* @__PURE__ */ (0, import_jsx_runtime66.jsx)("button", { type: "button", onClick: () => zoomBy(1 / ZOOM_STEP), disabled: view.zoom <= MIN_ZOOM, children: labels.zoomOut }),
5948
+ /* @__PURE__ */ (0, import_jsx_runtime66.jsx)("button", { type: "button", onClick: () => moveView(fitView(layout, size), true), children: labels.fit }),
5949
+ /* @__PURE__ */ (0, import_jsx_runtime66.jsx)("button", { type: "button", onClick: () => moveView(initialView(layout, size), true), children: labels.reset }),
5950
+ /* @__PURE__ */ (0, import_jsx_runtime66.jsx)("button", { type: "button", onClick: () => panBy(PAN_STEP, 0), "aria-label": labels.panLeft, children: labels.left }),
5951
+ /* @__PURE__ */ (0, import_jsx_runtime66.jsx)("button", { type: "button", onClick: () => panBy(0, PAN_STEP), "aria-label": labels.panUp, children: labels.up }),
5952
+ /* @__PURE__ */ (0, import_jsx_runtime66.jsx)("button", { type: "button", onClick: () => panBy(0, -PAN_STEP), "aria-label": labels.panDown, children: labels.down }),
5953
+ /* @__PURE__ */ (0, import_jsx_runtime66.jsx)("button", { type: "button", onClick: () => panBy(-PAN_STEP, 0), "aria-label": labels.panRight, children: labels.right }),
5954
+ /* @__PURE__ */ (0, import_jsx_runtime66.jsx)("span", { "aria-live": "polite", children: labels.zoomLevel(Math.round(view.zoom * 100)) })
5527
5955
  ] }),
5528
- bounded.omittedNodeCount > 0 && /* @__PURE__ */ (0, import_jsx_runtime65.jsx)("p", { className: "uix-relationship-graph__bounded", role: "status", children: labels.bounded(bounded.nodes.length, bounded.omittedNodeCount) }),
5529
- /* @__PURE__ */ (0, import_jsx_runtime65.jsx)("p", { id: hintId, className: "uix-visually-hidden", children: labels.keyboardHint }),
5530
- /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(
5956
+ bounded.omittedNodeCount > 0 && /* @__PURE__ */ (0, import_jsx_runtime66.jsx)("p", { className: "uix-relationship-graph__bounded", role: "status", children: labels.bounded(bounded.nodes.length, bounded.omittedNodeCount) }),
5957
+ /* @__PURE__ */ (0, import_jsx_runtime66.jsx)("p", { id: hintId, className: "uix-visually-hidden", children: labels.keyboardHint }),
5958
+ /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(
5531
5959
  "div",
5532
5960
  {
5533
5961
  ref: viewportRef,
@@ -5537,11 +5965,11 @@ function LayeredRelationshipGraph({
5537
5965
  onPointerMove,
5538
5966
  onPointerUp: onPointerEnd,
5539
5967
  onPointerCancel: onPointerEnd,
5540
- children: /* @__PURE__ */ (0, import_jsx_runtime65.jsxs)("div", { className: "uix-relationship-graph__stage", style: stageStyle, "data-animate": animate || void 0, onTransitionEnd: () => setAnimate(false), children: [
5541
- /* @__PURE__ */ (0, import_jsx_runtime65.jsx)("svg", { className: "uix-relationship-graph__edges", width: layout.width, height: layout.height, "aria-hidden": "true", focusable: "false", children: layout.edges.map((edge) => {
5968
+ children: /* @__PURE__ */ (0, import_jsx_runtime66.jsxs)("div", { className: "uix-relationship-graph__stage", style: stageStyle, "data-animate": animate || void 0, onTransitionEnd: () => setAnimate(false), children: [
5969
+ /* @__PURE__ */ (0, import_jsx_runtime66.jsx)("svg", { className: "uix-relationship-graph__edges", width: layout.width, height: layout.height, "aria-hidden": "true", focusable: "false", children: layout.edges.map((edge) => {
5542
5970
  const active = activeIds.has(edge.source) || activeIds.has(edge.target) || edge.edgeIds.some((id) => highlightedEdgeIds.has(id));
5543
5971
  const angle = edge.arrowAngle * 180 / Math.PI;
5544
- return /* @__PURE__ */ (0, import_jsx_runtime65.jsxs)(
5972
+ return /* @__PURE__ */ (0, import_jsx_runtime66.jsxs)(
5545
5973
  "g",
5546
5974
  {
5547
5975
  className: "uix-relationship-graph__link",
@@ -5551,15 +5979,15 @@ function LayeredRelationshipGraph({
5551
5979
  "data-conflicted": edge.edgeIds.some((id) => conflictedEdgeIds.has(id)) || void 0,
5552
5980
  "data-dimmed": dimmedNodeIds.has(edge.source) && dimmedNodeIds.has(edge.target) || void 0,
5553
5981
  children: [
5554
- /* @__PURE__ */ (0, import_jsx_runtime65.jsx)("path", { d: edge.path }),
5555
- edge.arrow !== "none" && /* @__PURE__ */ (0, import_jsx_runtime65.jsx)("polygon", { points: arrowPoints, transform: `translate(${edge.arrowX} ${edge.arrowY}) rotate(${angle})` }),
5556
- showLabel(edge) && /* @__PURE__ */ (0, import_jsx_runtime65.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__ */ (0, import_jsx_runtime65.jsx)("tspan", { x: edge.labelX, dy: index === 0 ? `${-(lines.length - 1) * 0.55}em` : "1.1em", children: line }, index)) })
5982
+ /* @__PURE__ */ (0, import_jsx_runtime66.jsx)("path", { d: edge.path }),
5983
+ edge.arrow !== "none" && /* @__PURE__ */ (0, import_jsx_runtime66.jsx)("polygon", { points: arrowPoints, transform: `translate(${edge.arrowX} ${edge.arrowY}) rotate(${angle})` }),
5984
+ showLabel(edge) && /* @__PURE__ */ (0, import_jsx_runtime66.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__ */ (0, import_jsx_runtime66.jsx)("tspan", { x: edge.labelX, dy: index === 0 ? `${-(lines.length - 1) * 0.55}em` : "1.1em", children: line }, index)) })
5557
5985
  ]
5558
5986
  },
5559
5987
  edge.id
5560
5988
  );
5561
5989
  }) }),
5562
- layout.columns.map((column) => /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(
5990
+ layout.columns.map((column) => /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(
5563
5991
  "div",
5564
5992
  {
5565
5993
  className: "uix-relationship-graph__column",
@@ -5569,17 +5997,17 @@ function LayeredRelationshipGraph({
5569
5997
  },
5570
5998
  column.depth
5571
5999
  )),
5572
- /* @__PURE__ */ (0, import_jsx_runtime65.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) => {
6000
+ /* @__PURE__ */ (0, import_jsx_runtime66.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) => {
5573
6001
  const selected = item.id === selectedItemId;
5574
6002
  const dimmed = item.node ? dimmedNodeIds.has(item.node.id) : item.cluster.members.every((member) => dimmedNodeIds.has(member.id));
5575
- const body = item.cluster ? renderCluster?.(item.cluster) ?? /* @__PURE__ */ (0, import_jsx_runtime65.jsxs)(import_jsx_runtime65.Fragment, { children: [
5576
- /* @__PURE__ */ (0, import_jsx_runtime65.jsx)("span", { className: "uix-relationship-graph__item-label", children: labels.cluster(item.cluster.members.length, item.cluster.type, item.cluster.edgeLabel) }),
5577
- /* @__PURE__ */ (0, import_jsx_runtime65.jsx)("span", { className: "uix-relationship-graph__item-meta", children: labels.expandCluster })
5578
- ] }) : renderNode?.(item.node, { selected, dimmed }) ?? /* @__PURE__ */ (0, import_jsx_runtime65.jsxs)(import_jsx_runtime65.Fragment, { children: [
5579
- /* @__PURE__ */ (0, import_jsx_runtime65.jsx)("span", { className: "uix-relationship-graph__item-label", children: item.node.label }),
5580
- (item.node.type || item.node.description) && /* @__PURE__ */ (0, import_jsx_runtime65.jsx)("span", { className: "uix-relationship-graph__item-meta", children: [item.node.type, item.node.description].filter(Boolean).join(" \xB7 ") })
6003
+ const body = item.cluster ? renderCluster?.(item.cluster) ?? /* @__PURE__ */ (0, import_jsx_runtime66.jsxs)(import_jsx_runtime66.Fragment, { children: [
6004
+ /* @__PURE__ */ (0, import_jsx_runtime66.jsx)("span", { className: "uix-relationship-graph__item-label", children: labels.cluster(item.cluster.members.length, item.cluster.type, item.cluster.edgeLabel) }),
6005
+ /* @__PURE__ */ (0, import_jsx_runtime66.jsx)("span", { className: "uix-relationship-graph__item-meta", children: labels.expandCluster })
6006
+ ] }) : renderNode?.(item.node, { selected, dimmed }) ?? /* @__PURE__ */ (0, import_jsx_runtime66.jsxs)(import_jsx_runtime66.Fragment, { children: [
6007
+ /* @__PURE__ */ (0, import_jsx_runtime66.jsx)("span", { className: "uix-relationship-graph__item-label", children: item.node.label }),
6008
+ (item.node.type || item.node.description) && /* @__PURE__ */ (0, import_jsx_runtime66.jsx)("span", { className: "uix-relationship-graph__item-meta", children: [item.node.type, item.node.description].filter(Boolean).join(" \xB7 ") })
5581
6009
  ] });
5582
- return /* @__PURE__ */ (0, import_jsx_runtime65.jsxs)(
6010
+ return /* @__PURE__ */ (0, import_jsx_runtime66.jsxs)(
5583
6011
  "button",
5584
6012
  {
5585
6013
  ref: (element) => {
@@ -5610,7 +6038,7 @@ function LayeredRelationshipGraph({
5610
6038
  onPointerLeave: () => setHoverId((current) => current === item.id ? void 0 : current),
5611
6039
  children: [
5612
6040
  body,
5613
- item.inCycle && /* @__PURE__ */ (0, import_jsx_runtime65.jsx)("span", { className: "uix-relationship-graph__item-flag", "aria-hidden": "true", children: labels.cycle })
6041
+ item.inCycle && /* @__PURE__ */ (0, import_jsx_runtime66.jsx)("span", { className: "uix-relationship-graph__item-flag", "aria-hidden": "true", children: labels.cycle })
5614
6042
  ]
5615
6043
  },
5616
6044
  item.id
@@ -5618,7 +6046,7 @@ function LayeredRelationshipGraph({
5618
6046
  }) }),
5619
6047
  layout.items.filter((item) => item.expandedGroup).map((item) => {
5620
6048
  const group = item.expandedGroup;
5621
- return /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(
6049
+ return /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(
5622
6050
  "button",
5623
6051
  {
5624
6052
  type: "button",
@@ -5634,8 +6062,8 @@ function LayeredRelationshipGraph({
5634
6062
  ] })
5635
6063
  }
5636
6064
  ),
5637
- legend.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime65.jsx)("ul", { className: "uix-relationship-graph__legend", "aria-label": labels.legend, children: legend.map((entry) => /* @__PURE__ */ (0, import_jsx_runtime65.jsx)("li", { "data-type": entry.id, children: entry.label }, entry.id)) }),
5638
- showList && /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(
6065
+ legend.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime66.jsx)("ul", { className: "uix-relationship-graph__legend", "aria-label": labels.legend, children: legend.map((entry) => /* @__PURE__ */ (0, import_jsx_runtime66.jsx)("li", { "data-type": entry.id, children: entry.label }, entry.id)) }),
6066
+ showList && /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(
5639
6067
  EquivalentRelationshipList,
5640
6068
  {
5641
6069
  nodes: bounded.nodes,
@@ -5654,7 +6082,7 @@ function LayeredRelationshipGraph({
5654
6082
  }
5655
6083
 
5656
6084
  // src/components/RelationshipGraph.tsx
5657
- var import_jsx_runtime66 = require("react/jsx-runtime");
6085
+ var import_jsx_runtime67 = require("react/jsx-runtime");
5658
6086
  var DEFAULT_RELATIONSHIP_GRAPH_LABELS = {
5659
6087
  graph: "Relationship graph",
5660
6088
  controls: "Graph view controls",
@@ -5718,19 +6146,19 @@ function radialViewBox(nodes) {
5718
6146
  function RelationshipGraph(props) {
5719
6147
  const labels = (0, import_react44.useMemo)(() => ({ ...DEFAULT_RELATIONSHIP_GRAPH_LABELS, ...props.labels }), [props.labels]);
5720
6148
  const stateClass = cx("uix-relationship-graph uix-relationship-graph--state", props.className);
5721
- if (props.loading) return /* @__PURE__ */ (0, import_jsx_runtime66.jsx)("div", { className: stateClass, role: "status", children: labels.loading });
6149
+ if (props.loading) return /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("div", { className: stateClass, role: "status", children: labels.loading });
5722
6150
  if (props.error) {
5723
- return /* @__PURE__ */ (0, import_jsx_runtime66.jsxs)("div", { className: stateClass, role: "alert", children: [
5724
- /* @__PURE__ */ (0, import_jsx_runtime66.jsx)("p", { children: props.error }),
5725
- props.onRetry && /* @__PURE__ */ (0, import_jsx_runtime66.jsx)("button", { type: "button", className: "uix-btn uix-btn--secondary", onClick: props.onRetry, children: labels.retry })
6151
+ return /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)("div", { className: stateClass, role: "alert", children: [
6152
+ /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("p", { children: props.error }),
6153
+ props.onRetry && /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("button", { type: "button", className: "uix-btn uix-btn--secondary", onClick: props.onRetry, children: labels.retry })
5726
6154
  ] });
5727
6155
  }
5728
- if (props.nodes.length === 0) return /* @__PURE__ */ (0, import_jsx_runtime66.jsxs)("div", { className: stateClass, children: [
5729
- /* @__PURE__ */ (0, import_jsx_runtime66.jsx)("p", { children: labels.emptyTitle }),
5730
- /* @__PURE__ */ (0, import_jsx_runtime66.jsx)("p", { children: labels.emptyHint })
6156
+ if (props.nodes.length === 0) return /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)("div", { className: stateClass, children: [
6157
+ /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("p", { children: labels.emptyTitle }),
6158
+ /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("p", { children: labels.emptyHint })
5731
6159
  ] });
5732
- if (props.layout === "layered") return /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(LayeredRelationshipGraph, { ...props, labels });
5733
- return /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(RadialRelationshipGraph, { ...props, labels });
6160
+ if (props.layout === "layered") return /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(LayeredRelationshipGraph, { ...props, labels });
6161
+ return /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(RadialRelationshipGraph, { ...props, labels });
5734
6162
  }
5735
6163
  function RadialRelationshipGraph({
5736
6164
  nodes,
@@ -5783,25 +6211,25 @@ function RadialRelationshipGraph({
5783
6211
  setZoom(1);
5784
6212
  setPan({ x: 0, y: 0 });
5785
6213
  };
5786
- return /* @__PURE__ */ (0, import_jsx_runtime66.jsxs)("section", { className: cx("uix-relationship-graph", `uix-relationship-graph--${density}`, className), "aria-label": labels.graph, children: [
5787
- /* @__PURE__ */ (0, import_jsx_runtime66.jsxs)("div", { className: "uix-relationship-graph__toolbar", "aria-label": labels.controls, children: [
5788
- /* @__PURE__ */ (0, import_jsx_runtime66.jsx)("button", { type: "button", onClick: () => setPan((value) => ({ ...value, x: value.x - 24 })), "aria-label": labels.panLeft, children: labels.left }),
5789
- /* @__PURE__ */ (0, import_jsx_runtime66.jsx)("button", { type: "button", onClick: () => setPan((value) => ({ ...value, y: value.y - 24 })), "aria-label": labels.panUp, children: labels.up }),
5790
- /* @__PURE__ */ (0, import_jsx_runtime66.jsx)("button", { type: "button", onClick: () => setPan((value) => ({ ...value, y: value.y + 24 })), "aria-label": labels.panDown, children: labels.down }),
5791
- /* @__PURE__ */ (0, import_jsx_runtime66.jsx)("button", { type: "button", onClick: () => setPan((value) => ({ ...value, x: value.x + 24 })), "aria-label": labels.panRight, children: labels.right }),
5792
- /* @__PURE__ */ (0, import_jsx_runtime66.jsx)("button", { type: "button", onClick: () => setZoom((value) => Math.min(2, Number((value + 0.2).toFixed(1)))), "aria-label": labels.zoomIn, children: labels.zoomIn }),
5793
- /* @__PURE__ */ (0, import_jsx_runtime66.jsx)("button", { type: "button", onClick: () => setZoom((value) => Math.max(0.5, Number((value - 0.2).toFixed(1)))), "aria-label": labels.zoomOut, children: labels.zoomOut }),
5794
- /* @__PURE__ */ (0, import_jsx_runtime66.jsx)("button", { type: "button", onClick: reset, children: labels.reset }),
5795
- /* @__PURE__ */ (0, import_jsx_runtime66.jsx)("span", { "aria-live": "polite", children: labels.zoomLevel(Math.round(zoom * 100)) })
6214
+ return /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)("section", { className: cx("uix-relationship-graph", `uix-relationship-graph--${density}`, className), "aria-label": labels.graph, children: [
6215
+ /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)("div", { className: "uix-relationship-graph__toolbar", "aria-label": labels.controls, children: [
6216
+ /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("button", { type: "button", onClick: () => setPan((value) => ({ ...value, x: value.x - 24 })), "aria-label": labels.panLeft, children: labels.left }),
6217
+ /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("button", { type: "button", onClick: () => setPan((value) => ({ ...value, y: value.y - 24 })), "aria-label": labels.panUp, children: labels.up }),
6218
+ /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("button", { type: "button", onClick: () => setPan((value) => ({ ...value, y: value.y + 24 })), "aria-label": labels.panDown, children: labels.down }),
6219
+ /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("button", { type: "button", onClick: () => setPan((value) => ({ ...value, x: value.x + 24 })), "aria-label": labels.panRight, children: labels.right }),
6220
+ /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("button", { type: "button", onClick: () => setZoom((value) => Math.min(2, Number((value + 0.2).toFixed(1)))), "aria-label": labels.zoomIn, children: labels.zoomIn }),
6221
+ /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("button", { type: "button", onClick: () => setZoom((value) => Math.max(0.5, Number((value - 0.2).toFixed(1)))), "aria-label": labels.zoomOut, children: labels.zoomOut }),
6222
+ /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("button", { type: "button", onClick: reset, children: labels.reset }),
6223
+ /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("span", { "aria-live": "polite", children: labels.zoomLevel(Math.round(zoom * 100)) })
5796
6224
  ] }),
5797
- bounded.omittedNodeCount > 0 && /* @__PURE__ */ (0, import_jsx_runtime66.jsx)("p", { className: "uix-relationship-graph__bounded", role: "status", children: labels.bounded(bounded.nodes.length, bounded.omittedNodeCount) }),
5798
- /* @__PURE__ */ (0, import_jsx_runtime66.jsx)("div", { className: "uix-relationship-graph__visual", children: /* @__PURE__ */ (0, import_jsx_runtime66.jsx)("svg", { ref: svgRef, viewBox: radialViewBox(positioned), role: "group", "aria-label": labels.graphSummary(bounded.nodes.length, bounded.edges.length), children: /* @__PURE__ */ (0, import_jsx_runtime66.jsxs)("g", { transform: `translate(${pan.x} ${pan.y}) scale(${zoom})`, children: [
6225
+ bounded.omittedNodeCount > 0 && /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("p", { className: "uix-relationship-graph__bounded", role: "status", children: labels.bounded(bounded.nodes.length, bounded.omittedNodeCount) }),
6226
+ /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("div", { className: "uix-relationship-graph__visual", children: /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("svg", { ref: svgRef, viewBox: radialViewBox(positioned), role: "group", "aria-label": labels.graphSummary(bounded.nodes.length, bounded.edges.length), children: /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)("g", { transform: `translate(${pan.x} ${pan.y}) scale(${zoom})`, children: [
5799
6227
  bounded.edges.map((edge) => {
5800
6228
  const source = positionedById.get(edge.source);
5801
6229
  const target = positionedById.get(edge.target);
5802
- return /* @__PURE__ */ (0, import_jsx_runtime66.jsx)("line", { x1: source.x * RADIAL_SCALE_X, y1: source.y * RADIAL_SCALE_Y, x2: target.x * RADIAL_SCALE_X, y2: target.y * RADIAL_SCALE_Y, className: "uix-relationship-graph__edge", "data-typed": edge.type != null && typeColor.has(edge.type) || void 0, style: edge.type != null && typeColor.has(edge.type) ? { "--uix-graph-type-color": typeColor.get(edge.type) } : void 0, "data-highlighted": highlightedEdgeIds.has(edge.id) || void 0, "data-conflicted": conflictedEdgeIds.has(edge.id) || void 0, children: /* @__PURE__ */ (0, import_jsx_runtime66.jsx)("title", { children: edge.label ?? edge.type ?? labels.relationship }) }, edge.id);
6230
+ return /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("line", { x1: source.x * RADIAL_SCALE_X, y1: source.y * RADIAL_SCALE_Y, x2: target.x * RADIAL_SCALE_X, y2: target.y * RADIAL_SCALE_Y, className: "uix-relationship-graph__edge", "data-typed": edge.type != null && typeColor.has(edge.type) || void 0, style: edge.type != null && typeColor.has(edge.type) ? { "--uix-graph-type-color": typeColor.get(edge.type) } : void 0, "data-highlighted": highlightedEdgeIds.has(edge.id) || void 0, "data-conflicted": conflictedEdgeIds.has(edge.id) || void 0, children: /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("title", { children: edge.label ?? edge.type ?? labels.relationship }) }, edge.id);
5803
6231
  }),
5804
- positioned.map((node) => /* @__PURE__ */ (0, import_jsx_runtime66.jsxs)(
6232
+ positioned.map((node) => /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)(
5805
6233
  "g",
5806
6234
  {
5807
6235
  transform: `translate(${node.x * RADIAL_SCALE_X} ${node.y * RADIAL_SCALE_Y})`,
@@ -5817,22 +6245,22 @@ function RadialRelationshipGraph({
5817
6245
  onKeyDown: (event) => onNodeKeyDown(event, node.id),
5818
6246
  onClick: () => select(node.id),
5819
6247
  children: [
5820
- /* @__PURE__ */ (0, import_jsx_runtime66.jsx)("title", { children: node.label }),
5821
- /* @__PURE__ */ (0, import_jsx_runtime66.jsx)("rect", { x: -RADIAL_NODE_HALF_W, y: -RADIAL_NODE_HALF_H, width: RADIAL_NODE_HALF_W * 2, height: RADIAL_NODE_HALF_H * 2, rx: "8" }),
5822
- /* @__PURE__ */ (0, import_jsx_runtime66.jsx)("text", { textAnchor: "middle", dominantBaseline: "middle", children: node.label.length > 16 ? `${node.label.slice(0, 15)}\u2026` : node.label })
6248
+ /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("title", { children: node.label }),
6249
+ /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("rect", { x: -RADIAL_NODE_HALF_W, y: -RADIAL_NODE_HALF_H, width: RADIAL_NODE_HALF_W * 2, height: RADIAL_NODE_HALF_H * 2, rx: "8" }),
6250
+ /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("text", { textAnchor: "middle", dominantBaseline: "middle", children: node.label.length > 16 ? `${node.label.slice(0, 15)}\u2026` : node.label })
5823
6251
  ]
5824
6252
  },
5825
6253
  node.id
5826
6254
  ))
5827
6255
  ] }) }) }),
5828
- legend.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime66.jsx)("ul", { className: "uix-relationship-graph__legend", "aria-label": labels.legend, children: legend.map((item) => /* @__PURE__ */ (0, import_jsx_runtime66.jsx)("li", { "data-type": item.id, style: { "--uix-graph-type-color": typeColor.get(item.id) }, children: item.label }, item.id)) }),
5829
- showList && /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(EquivalentRelationshipList, { nodes: bounded.nodes, edges: bounded.edges, selectedId, labels, onSelect: select, onExpandNeighbors, onOpenDetails })
6256
+ legend.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("ul", { className: "uix-relationship-graph__legend", "aria-label": labels.legend, children: legend.map((item) => /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("li", { "data-type": item.id, style: { "--uix-graph-type-color": typeColor.get(item.id) }, children: item.label }, item.id)) }),
6257
+ showList && /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(EquivalentRelationshipList, { nodes: bounded.nodes, edges: bounded.edges, selectedId, labels, onSelect: select, onExpandNeighbors, onOpenDetails })
5830
6258
  ] });
5831
6259
  }
5832
6260
 
5833
6261
  // src/components/MatchReview.tsx
5834
6262
  var import_react45 = require("react");
5835
- var import_jsx_runtime67 = require("react/jsx-runtime");
6263
+ var import_jsx_runtime68 = require("react/jsx-runtime");
5836
6264
  var DEFAULT_MATCH_REVIEW_LABELS = {
5837
6265
  region: "Match review",
5838
6266
  loading: "Loading match candidates\u2026",
@@ -5927,48 +6355,48 @@ function MatchReview({
5927
6355
  setBulkPending(false);
5928
6356
  }
5929
6357
  };
5930
- if (loading) return /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("div", { className: cx("uix-match-review uix-match-review--state", className), role: "status", children: labels.loading });
5931
- if (error) return /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)("div", { className: cx("uix-match-review uix-match-review--state", className), role: "alert", children: [
5932
- /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("p", { children: error }),
5933
- onRetry && /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("button", { type: "button", className: "uix-btn uix-btn--secondary", onClick: onRetry, children: labels.retry })
6358
+ if (loading) return /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("div", { className: cx("uix-match-review uix-match-review--state", className), role: "status", children: labels.loading });
6359
+ if (error) return /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)("div", { className: cx("uix-match-review uix-match-review--state", className), role: "alert", children: [
6360
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("p", { children: error }),
6361
+ onRetry && /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("button", { type: "button", className: "uix-btn uix-btn--secondary", onClick: onRetry, children: labels.retry })
5934
6362
  ] });
5935
- if (candidates.length === 0) return /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)("div", { className: cx("uix-match-review uix-match-review--state", className), children: [
5936
- /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("p", { children: labels.empty }),
5937
- /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("p", { children: labels.emptyDetail })
6363
+ if (candidates.length === 0) return /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)("div", { className: cx("uix-match-review uix-match-review--state", className), children: [
6364
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("p", { children: labels.empty }),
6365
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("p", { children: labels.emptyDetail })
5938
6366
  ] });
5939
- return /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)("section", { className: cx("uix-match-review", className), "aria-label": labels.region, children: [
5940
- /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)("div", { className: "uix-match-review__summary", children: [
5941
- /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)("div", { children: [
5942
- /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("strong", { children: incomingLabel }),
5943
- /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("span", { children: fillLabel(labels.pendingOf, { pending: pending.length, total: candidates.length }) })
6367
+ return /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)("section", { className: cx("uix-match-review", className), "aria-label": labels.region, children: [
6368
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)("div", { className: "uix-match-review__summary", children: [
6369
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)("div", { children: [
6370
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("strong", { children: incomingLabel }),
6371
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("span", { children: fillLabel(labels.pendingOf, { pending: pending.length, total: candidates.length }) })
5944
6372
  ] }),
5945
- /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("div", { className: "uix-match-review__incoming", children: fields.map((field) => /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)("span", { children: [
5946
- /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("b", { children: field.label }),
6373
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("div", { className: "uix-match-review__incoming", children: fields.map((field) => /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)("span", { children: [
6374
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("b", { children: field.label }),
5947
6375
  field.render?.(incoming[field.id], incoming) ?? valueText(incoming[field.id])
5948
6376
  ] }, field.id)) })
5949
6377
  ] }),
5950
- onBulkDecision && /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)("div", { className: "uix-match-review__bulk", "aria-label": labels.bulk, children: [
5951
- /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("span", { children: fillLabel(labels.selectedCount, { count: selection.size }) }),
5952
- /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("button", { type: "button", className: "uix-btn uix-btn--secondary uix-btn--sm", disabled: selection.size === 0 || bulkPending, onClick: () => void runBulk("accept"), children: bulkPending ? labels.applying : labels.acceptSelected }),
5953
- /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("button", { type: "button", className: "uix-btn uix-btn--ghost uix-btn--sm", disabled: selection.size === 0 || bulkPending, onClick: () => void runBulk("dismiss"), children: bulkPending ? labels.applying : labels.dismissSelected })
6378
+ onBulkDecision && /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)("div", { className: "uix-match-review__bulk", "aria-label": labels.bulk, children: [
6379
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("span", { children: fillLabel(labels.selectedCount, { count: selection.size }) }),
6380
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("button", { type: "button", className: "uix-btn uix-btn--secondary uix-btn--sm", disabled: selection.size === 0 || bulkPending, onClick: () => void runBulk("accept"), children: bulkPending ? labels.applying : labels.acceptSelected }),
6381
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("button", { type: "button", className: "uix-btn uix-btn--ghost uix-btn--sm", disabled: selection.size === 0 || bulkPending, onClick: () => void runBulk("dismiss"), children: bulkPending ? labels.applying : labels.dismissSelected })
5954
6382
  ] }),
5955
- /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("div", { className: "uix-match-review__table-wrap", children: /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)("table", { className: "uix-table uix-match-review__table", children: [
5956
- /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("caption", { className: "uix-visually-hidden", children: labels.caption }),
5957
- /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("thead", { children: /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)("tr", { children: [
5958
- /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("th", { scope: "col", children: /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("span", { className: "uix-visually-hidden", children: labels.select }) }),
5959
- /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("th", { scope: "col", children: labels.confidence }),
5960
- fields.map((field) => /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("th", { scope: "col", children: field.label }, field.id)),
5961
- /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("th", { scope: "col", children: labels.status }),
5962
- /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("th", { scope: "col", children: labels.actions })
6383
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("div", { className: "uix-match-review__table-wrap", children: /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)("table", { className: "uix-table uix-match-review__table", children: [
6384
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("caption", { className: "uix-visually-hidden", children: labels.caption }),
6385
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("thead", { children: /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)("tr", { children: [
6386
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("th", { scope: "col", children: /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("span", { className: "uix-visually-hidden", children: labels.select }) }),
6387
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("th", { scope: "col", children: labels.confidence }),
6388
+ fields.map((field) => /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("th", { scope: "col", children: field.label }, field.id)),
6389
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("th", { scope: "col", children: labels.status }),
6390
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("th", { scope: "col", children: labels.actions })
5963
6391
  ] }) }),
5964
- /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("tbody", { children: candidates.map((candidate) => {
6392
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("tbody", { children: candidates.map((candidate) => {
5965
6393
  const resolved = candidate.status === "resolved";
5966
- return /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)("tr", { "data-status": candidate.status ?? "pending", children: [
5967
- /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("td", { children: /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("input", { type: "checkbox", checked: selection.has(candidate.id), onChange: () => toggle(candidate.id), "aria-label": fillLabel(labels.selectCandidate, { id: candidate.id }) }) }),
5968
- /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("td", { children: /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("span", { className: "uix-match-review__confidence", children: candidate.confidence == null ? labels.notScored : `${Math.round(candidate.confidence * 100)}%` }) }),
5969
- fields.map((field) => /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("td", { children: field.render?.(candidate.record[field.id], candidate.record) ?? valueText(candidate.record[field.id]) }, field.id)),
5970
- /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("td", { children: /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(StatusPill, { tone: resolved ? "success" : "warning", children: resolved ? candidate.decision ? decisionLabel[candidate.decision] : labels.resolved : labels.pending }) }),
5971
- /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("td", { children: /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("div", { className: "uix-match-review__actions", children: ["accept", "dismiss", "split", "pick-other"].map((action) => /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(
6394
+ return /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)("tr", { "data-status": candidate.status ?? "pending", children: [
6395
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("td", { children: /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("input", { type: "checkbox", checked: selection.has(candidate.id), onChange: () => toggle(candidate.id), "aria-label": fillLabel(labels.selectCandidate, { id: candidate.id }) }) }),
6396
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("td", { children: /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("span", { className: "uix-match-review__confidence", children: candidate.confidence == null ? labels.notScored : `${Math.round(candidate.confidence * 100)}%` }) }),
6397
+ fields.map((field) => /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("td", { children: field.render?.(candidate.record[field.id], candidate.record) ?? valueText(candidate.record[field.id]) }, field.id)),
6398
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("td", { children: /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(StatusPill, { tone: resolved ? "success" : "warning", children: resolved ? candidate.decision ? decisionLabel[candidate.decision] : labels.resolved : labels.pending }) }),
6399
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("td", { children: /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("div", { className: "uix-match-review__actions", children: ["accept", "dismiss", "split", "pick-other"].map((action) => /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(
5972
6400
  "button",
5973
6401
  {
5974
6402
  type: "button",
@@ -5982,7 +6410,7 @@ function MatchReview({
5982
6410
  ] }, candidate.id);
5983
6411
  }) })
5984
6412
  ] }) }),
5985
- /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("p", { className: "uix-visually-hidden", "aria-live": "polite", children: announcement })
6413
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("p", { className: "uix-visually-hidden", "aria-live": "polite", children: announcement })
5986
6414
  ] });
5987
6415
  }
5988
6416
 
@@ -6012,7 +6440,7 @@ function parseMetricValue(value) {
6012
6440
  }
6013
6441
 
6014
6442
  // src/components/MetricInput.tsx
6015
- var import_jsx_runtime68 = require("react/jsx-runtime");
6443
+ var import_jsx_runtime69 = require("react/jsx-runtime");
6016
6444
  var defaultMetricFormat = (input) => input == null ? "" : String(input);
6017
6445
  function MetricInput({
6018
6446
  value,
@@ -6061,10 +6489,10 @@ function MetricInput({
6061
6489
  const parsed = parse(event.currentTarget.value);
6062
6490
  setText(parsed === null && event.currentTarget.value.trim() !== "" ? format(value) : format(parsed));
6063
6491
  };
6064
- return /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)("div", { className: cx("uix-metric-input", invalid && "uix-metric-input--invalid", className), children: [
6065
- /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("label", { className: "uix-field__label", htmlFor: id, children: label }),
6066
- /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)("div", { className: "uix-metric-input__control", children: [
6067
- /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(
6492
+ return /* @__PURE__ */ (0, import_jsx_runtime69.jsxs)("div", { className: cx("uix-metric-input", invalid && "uix-metric-input--invalid", className), children: [
6493
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsx)("label", { className: "uix-field__label", htmlFor: id, children: label }),
6494
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsxs)("div", { className: "uix-metric-input__control", children: [
6495
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(
6068
6496
  Input,
6069
6497
  {
6070
6498
  id,
@@ -6083,22 +6511,22 @@ function MetricInput({
6083
6511
  readOnly
6084
6512
  }
6085
6513
  ),
6086
- unit && /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("span", { className: "uix-metric-input__unit", "aria-hidden": "true", children: unit }),
6087
- /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)("span", { className: "uix-metric-input__steps", children: [
6088
- /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("button", { type: "button", className: "uix-metric-input__step", onClick: () => stepBy(1), disabled: disabled || readOnly, "aria-label": `Increase ${label}`, children: "+" }),
6089
- /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("button", { type: "button", className: "uix-metric-input__step", onClick: () => stepBy(-1), disabled: disabled || readOnly, "aria-label": `Decrease ${label}`, children: "\u2212" })
6514
+ unit && /* @__PURE__ */ (0, import_jsx_runtime69.jsx)("span", { className: "uix-metric-input__unit", "aria-hidden": "true", children: unit }),
6515
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsxs)("span", { className: "uix-metric-input__steps", children: [
6516
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsx)("button", { type: "button", className: "uix-metric-input__step", onClick: () => stepBy(1), disabled: disabled || readOnly, "aria-label": `Increase ${label}`, children: "+" }),
6517
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsx)("button", { type: "button", className: "uix-metric-input__step", onClick: () => stepBy(-1), disabled: disabled || readOnly, "aria-label": `Decrease ${label}`, children: "\u2212" })
6090
6518
  ] })
6091
6519
  ] }),
6092
- unit && /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)("span", { className: "uix-visually-hidden", children: [
6520
+ unit && /* @__PURE__ */ (0, import_jsx_runtime69.jsxs)("span", { className: "uix-visually-hidden", children: [
6093
6521
  "Unit: ",
6094
6522
  unit
6095
6523
  ] }),
6096
- invalid && errorMessage && /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("span", { id: errorId, className: "uix-field__error", children: errorMessage })
6524
+ invalid && errorMessage && /* @__PURE__ */ (0, import_jsx_runtime69.jsx)("span", { id: errorId, className: "uix-field__error", children: errorMessage })
6097
6525
  ] });
6098
6526
  }
6099
6527
 
6100
6528
  // src/components/LicensePositionBar.tsx
6101
- var import_jsx_runtime69 = require("react/jsx-runtime");
6529
+ var import_jsx_runtime70 = require("react/jsx-runtime");
6102
6530
  var defaultCapacityFormat = (value) => new Intl.NumberFormat().format(value);
6103
6531
  function LicensePositionBar({
6104
6532
  consumed,
@@ -6119,18 +6547,18 @@ function LicensePositionBar({
6119
6547
  const percent = safeEntitled === 0 ? safeConsumed > 0 ? 100 : 0 : safeConsumed / safeEntitled * 100;
6120
6548
  const format = (value) => `${formatValue(value)}${unit ? ` ${unit}` : ""}`;
6121
6549
  const summary = `${consumedLabel}: ${format(safeConsumed)}. ${entitledLabel}: ${format(safeEntitled)}. ${over > 0 ? `${format(over)} ${overLabel}` : `${format(available)} ${availableLabel}`}.`;
6122
- return /* @__PURE__ */ (0, import_jsx_runtime69.jsxs)("div", { className: cx("uix-license-position", over > 0 && "uix-license-position--over", className), ...props, children: [
6123
- /* @__PURE__ */ (0, import_jsx_runtime69.jsxs)("div", { className: "uix-license-position__header", children: [
6124
- /* @__PURE__ */ (0, import_jsx_runtime69.jsxs)("span", { className: "uix-license-position__value", children: [
6550
+ return /* @__PURE__ */ (0, import_jsx_runtime70.jsxs)("div", { className: cx("uix-license-position", over > 0 && "uix-license-position--over", className), ...props, children: [
6551
+ /* @__PURE__ */ (0, import_jsx_runtime70.jsxs)("div", { className: "uix-license-position__header", children: [
6552
+ /* @__PURE__ */ (0, import_jsx_runtime70.jsxs)("span", { className: "uix-license-position__value", children: [
6125
6553
  format(safeConsumed),
6126
6554
  " / ",
6127
6555
  format(safeEntitled)
6128
6556
  ] }),
6129
- /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(StatusPill, { tone: over > 0 ? "danger" : percent >= 80 ? "warning" : "success", children: over > 0 ? `${format(over)} ${overLabel}` : `${format(available)} ${availableLabel}` })
6557
+ /* @__PURE__ */ (0, import_jsx_runtime70.jsx)(StatusPill, { tone: over > 0 ? "danger" : percent >= 80 ? "warning" : "success", children: over > 0 ? `${format(over)} ${overLabel}` : `${format(available)} ${availableLabel}` })
6130
6558
  ] }),
6131
- /* @__PURE__ */ (0, import_jsx_runtime69.jsxs)("div", { className: "uix-license-position__track", children: [
6132
- /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(Meter, { value: Math.min(100, percent), tone: over > 0 ? "danger" : percent >= 80 ? "warning" : "success", "aria-label": summary, "aria-valuetext": summary }),
6133
- over > 0 && /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(
6559
+ /* @__PURE__ */ (0, import_jsx_runtime70.jsxs)("div", { className: "uix-license-position__track", children: [
6560
+ /* @__PURE__ */ (0, import_jsx_runtime70.jsx)(Meter, { value: Math.min(100, percent), tone: over > 0 ? "danger" : percent >= 80 ? "warning" : "success", "aria-label": summary, "aria-valuetext": summary }),
6561
+ over > 0 && /* @__PURE__ */ (0, import_jsx_runtime70.jsx)(
6134
6562
  "span",
6135
6563
  {
6136
6564
  className: "uix-license-position__overflow",
@@ -6139,7 +6567,7 @@ function LicensePositionBar({
6139
6567
  }
6140
6568
  )
6141
6569
  ] }),
6142
- /* @__PURE__ */ (0, import_jsx_runtime69.jsx)("span", { className: "uix-visually-hidden", children: summary })
6570
+ /* @__PURE__ */ (0, import_jsx_runtime70.jsx)("span", { className: "uix-visually-hidden", children: summary })
6143
6571
  ] });
6144
6572
  }
6145
6573
 
@@ -6214,7 +6642,7 @@ function meetsContrast(background, foreground, minimum = 4.5) {
6214
6642
 
6215
6643
  // src/components/ColorPicker.tsx
6216
6644
  var import_react47 = require("react");
6217
- var import_jsx_runtime70 = require("react/jsx-runtime");
6645
+ var import_jsx_runtime71 = require("react/jsx-runtime");
6218
6646
  var DEFAULT_COLOR_PICKER_LABELS = {
6219
6647
  trigger: "{label}: {color}",
6220
6648
  sample: "Aa",
@@ -6298,8 +6726,8 @@ function ColorPicker({
6298
6726
  if (next) onChange(next);
6299
6727
  };
6300
6728
  const sampleStyle = { backgroundColor: normalized };
6301
- return /* @__PURE__ */ (0, import_jsx_runtime70.jsxs)("div", { className: cx("uix-color-picker", className), children: [
6302
- /* @__PURE__ */ (0, import_jsx_runtime70.jsxs)(
6729
+ return /* @__PURE__ */ (0, import_jsx_runtime71.jsxs)("div", { className: cx("uix-color-picker", className), children: [
6730
+ /* @__PURE__ */ (0, import_jsx_runtime71.jsxs)(
6303
6731
  "button",
6304
6732
  {
6305
6733
  ref: triggerRef,
@@ -6311,12 +6739,12 @@ function ColorPicker({
6311
6739
  onClick: () => setOpen((current) => !current),
6312
6740
  disabled,
6313
6741
  children: [
6314
- /* @__PURE__ */ (0, import_jsx_runtime70.jsx)("span", { className: "uix-color-picker__swatch", style: sampleStyle, "aria-hidden": "true" }),
6315
- /* @__PURE__ */ (0, import_jsx_runtime70.jsx)("span", { children: normalized })
6742
+ /* @__PURE__ */ (0, import_jsx_runtime71.jsx)("span", { className: "uix-color-picker__swatch", style: sampleStyle, "aria-hidden": "true" }),
6743
+ /* @__PURE__ */ (0, import_jsx_runtime71.jsx)("span", { children: normalized })
6316
6744
  ]
6317
6745
  }
6318
6746
  ),
6319
- open && /* @__PURE__ */ (0, import_jsx_runtime70.jsxs)(
6747
+ open && /* @__PURE__ */ (0, import_jsx_runtime71.jsxs)(
6320
6748
  "div",
6321
6749
  {
6322
6750
  ref: dialogRef,
@@ -6327,55 +6755,55 @@ function ColorPicker({
6327
6755
  className: "uix-color-picker__popover",
6328
6756
  onKeyDown: onDialogKeyDown,
6329
6757
  children: [
6330
- /* @__PURE__ */ (0, import_jsx_runtime70.jsx)("div", { className: "uix-color-picker__preview", style: sampleStyle, children: /* @__PURE__ */ (0, import_jsx_runtime70.jsx)("span", { style: { color: foreground }, children: labels.sample }) }),
6331
- /* @__PURE__ */ (0, import_jsx_runtime70.jsxs)("label", { className: "uix-color-picker__range", children: [
6758
+ /* @__PURE__ */ (0, import_jsx_runtime71.jsx)("div", { className: "uix-color-picker__preview", style: sampleStyle, children: /* @__PURE__ */ (0, import_jsx_runtime71.jsx)("span", { style: { color: foreground }, children: labels.sample }) }),
6759
+ /* @__PURE__ */ (0, import_jsx_runtime71.jsxs)("label", { className: "uix-color-picker__range", children: [
6332
6760
  labels.hue,
6333
6761
  " ",
6334
- /* @__PURE__ */ (0, import_jsx_runtime70.jsxs)("span", { children: [
6762
+ /* @__PURE__ */ (0, import_jsx_runtime71.jsxs)("span", { children: [
6335
6763
  Math.round(hsv.h),
6336
6764
  "\xB0"
6337
6765
  ] }),
6338
- /* @__PURE__ */ (0, import_jsx_runtime70.jsx)("input", { type: "range", min: "0", max: "359", value: Math.round(hsv.h), onChange: (event) => updateHsv({ h: Number(event.currentTarget.value) }) })
6766
+ /* @__PURE__ */ (0, import_jsx_runtime71.jsx)("input", { type: "range", min: "0", max: "359", value: Math.round(hsv.h), onChange: (event) => updateHsv({ h: Number(event.currentTarget.value) }) })
6339
6767
  ] }),
6340
- /* @__PURE__ */ (0, import_jsx_runtime70.jsxs)("label", { className: "uix-color-picker__range", children: [
6768
+ /* @__PURE__ */ (0, import_jsx_runtime71.jsxs)("label", { className: "uix-color-picker__range", children: [
6341
6769
  labels.saturation,
6342
6770
  " ",
6343
- /* @__PURE__ */ (0, import_jsx_runtime70.jsxs)("span", { children: [
6771
+ /* @__PURE__ */ (0, import_jsx_runtime71.jsxs)("span", { children: [
6344
6772
  Math.round(hsv.s * 100),
6345
6773
  "%"
6346
6774
  ] }),
6347
- /* @__PURE__ */ (0, import_jsx_runtime70.jsx)("input", { type: "range", min: "0", max: "100", value: Math.round(hsv.s * 100), onChange: (event) => updateHsv({ s: Number(event.currentTarget.value) / 100 }) })
6775
+ /* @__PURE__ */ (0, import_jsx_runtime71.jsx)("input", { type: "range", min: "0", max: "100", value: Math.round(hsv.s * 100), onChange: (event) => updateHsv({ s: Number(event.currentTarget.value) / 100 }) })
6348
6776
  ] }),
6349
- /* @__PURE__ */ (0, import_jsx_runtime70.jsxs)("label", { className: "uix-color-picker__range", children: [
6777
+ /* @__PURE__ */ (0, import_jsx_runtime71.jsxs)("label", { className: "uix-color-picker__range", children: [
6350
6778
  labels.brightness,
6351
6779
  " ",
6352
- /* @__PURE__ */ (0, import_jsx_runtime70.jsxs)("span", { children: [
6780
+ /* @__PURE__ */ (0, import_jsx_runtime71.jsxs)("span", { children: [
6353
6781
  Math.round(hsv.v * 100),
6354
6782
  "%"
6355
6783
  ] }),
6356
- /* @__PURE__ */ (0, import_jsx_runtime70.jsx)("input", { type: "range", min: "0", max: "100", value: Math.round(hsv.v * 100), onChange: (event) => updateHsv({ v: Number(event.currentTarget.value) / 100 }) })
6784
+ /* @__PURE__ */ (0, import_jsx_runtime71.jsx)("input", { type: "range", min: "0", max: "100", value: Math.round(hsv.v * 100), onChange: (event) => updateHsv({ v: Number(event.currentTarget.value) / 100 }) })
6357
6785
  ] }),
6358
- /* @__PURE__ */ (0, import_jsx_runtime70.jsxs)("label", { className: "uix-color-picker__hex", children: [
6786
+ /* @__PURE__ */ (0, import_jsx_runtime71.jsxs)("label", { className: "uix-color-picker__hex", children: [
6359
6787
  labels.hex,
6360
- /* @__PURE__ */ (0, import_jsx_runtime70.jsxs)("span", { className: "uix-color-picker__hex-row", children: [
6361
- /* @__PURE__ */ (0, import_jsx_runtime70.jsx)("input", { className: "uix-input", value: hexText, onChange: (event) => setHexText(event.currentTarget.value), onBlur: commitHex, onKeyDown: (event) => {
6788
+ /* @__PURE__ */ (0, import_jsx_runtime71.jsxs)("span", { className: "uix-color-picker__hex-row", children: [
6789
+ /* @__PURE__ */ (0, import_jsx_runtime71.jsx)("input", { className: "uix-input", value: hexText, onChange: (event) => setHexText(event.currentTarget.value), onBlur: commitHex, onKeyDown: (event) => {
6362
6790
  if (event.key === "Enter") commitHex();
6363
6791
  }, "aria-invalid": !normalizeHex(hexText) }),
6364
- /* @__PURE__ */ (0, import_jsx_runtime70.jsx)("button", { type: "button", className: "uix-btn uix-btn--secondary uix-btn--sm", onClick: commitHex, disabled: !normalizeHex(hexText), children: labels.set })
6792
+ /* @__PURE__ */ (0, import_jsx_runtime71.jsx)("button", { type: "button", className: "uix-btn uix-btn--secondary uix-btn--sm", onClick: commitHex, disabled: !normalizeHex(hexText), children: labels.set })
6365
6793
  ] })
6366
6794
  ] }),
6367
- (presets.length > 0 || recent.length > 0) && /* @__PURE__ */ (0, import_jsx_runtime70.jsxs)("div", { className: "uix-color-picker__palettes", children: [
6368
- presets.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime70.jsxs)("fieldset", { children: [
6369
- /* @__PURE__ */ (0, import_jsx_runtime70.jsx)("legend", { children: labels.presets }),
6370
- /* @__PURE__ */ (0, import_jsx_runtime70.jsx)("div", { children: presets.map((color) => /* @__PURE__ */ (0, import_jsx_runtime70.jsx)("button", { type: "button", className: "uix-color-picker__preset", style: { backgroundColor: normalizeHex(color) ?? color }, onClick: () => choose(color), "aria-label": fillLabel(labels.usePreset, { color }) }, color)) })
6795
+ (presets.length > 0 || recent.length > 0) && /* @__PURE__ */ (0, import_jsx_runtime71.jsxs)("div", { className: "uix-color-picker__palettes", children: [
6796
+ presets.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime71.jsxs)("fieldset", { children: [
6797
+ /* @__PURE__ */ (0, import_jsx_runtime71.jsx)("legend", { children: labels.presets }),
6798
+ /* @__PURE__ */ (0, import_jsx_runtime71.jsx)("div", { children: presets.map((color) => /* @__PURE__ */ (0, import_jsx_runtime71.jsx)("button", { type: "button", className: "uix-color-picker__preset", style: { backgroundColor: normalizeHex(color) ?? color }, onClick: () => choose(color), "aria-label": fillLabel(labels.usePreset, { color }) }, color)) })
6371
6799
  ] }),
6372
- recent.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime70.jsxs)("fieldset", { children: [
6373
- /* @__PURE__ */ (0, import_jsx_runtime70.jsx)("legend", { children: labels.recent }),
6374
- /* @__PURE__ */ (0, import_jsx_runtime70.jsx)("div", { children: recent.map((color) => /* @__PURE__ */ (0, import_jsx_runtime70.jsx)("button", { type: "button", className: "uix-color-picker__preset", style: { backgroundColor: normalizeHex(color) ?? color }, onClick: () => choose(color), "aria-label": fillLabel(labels.useRecent, { color }) }, color)) })
6800
+ recent.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime71.jsxs)("fieldset", { children: [
6801
+ /* @__PURE__ */ (0, import_jsx_runtime71.jsx)("legend", { children: labels.recent }),
6802
+ /* @__PURE__ */ (0, import_jsx_runtime71.jsx)("div", { children: recent.map((color) => /* @__PURE__ */ (0, import_jsx_runtime71.jsx)("button", { type: "button", className: "uix-color-picker__preset", style: { backgroundColor: normalizeHex(color) ?? color }, onClick: () => choose(color), "aria-label": fillLabel(labels.useRecent, { color }) }, color)) })
6375
6803
  ] })
6376
6804
  ] }),
6377
- /* @__PURE__ */ (0, import_jsx_runtime70.jsx)("p", { className: cx("uix-color-picker__contrast", passes ? "uix-color-picker__contrast--pass" : "uix-color-picker__contrast--fail"), role: "status", "aria-live": "polite", children: fillLabel(passes ? labels.contrastPasses : labels.contrastFails, { ratio: ratio.toFixed(2), minimum: minimumContrast }) }),
6378
- /* @__PURE__ */ (0, import_jsx_runtime70.jsx)("button", { type: "button", className: "uix-btn uix-btn--primary uix-btn--sm", onClick: close, children: labels.done })
6805
+ /* @__PURE__ */ (0, import_jsx_runtime71.jsx)("p", { className: cx("uix-color-picker__contrast", passes ? "uix-color-picker__contrast--pass" : "uix-color-picker__contrast--fail"), role: "status", "aria-live": "polite", children: fillLabel(passes ? labels.contrastPasses : labels.contrastFails, { ratio: ratio.toFixed(2), minimum: minimumContrast }) }),
6806
+ /* @__PURE__ */ (0, import_jsx_runtime71.jsx)("button", { type: "button", className: "uix-btn uix-btn--primary uix-btn--sm", onClick: close, children: labels.done })
6379
6807
  ]
6380
6808
  }
6381
6809
  )
@@ -6383,7 +6811,7 @@ function ColorPicker({
6383
6811
  }
6384
6812
 
6385
6813
  // src/components/BrandProfiles.tsx
6386
- var import_jsx_runtime71 = require("react/jsx-runtime");
6814
+ var import_jsx_runtime72 = require("react/jsx-runtime");
6387
6815
  var PROFILE_PROPERTIES = {
6388
6816
  brand: "--uix-brand",
6389
6817
  brandForeground: "--uix-brand-fg",
@@ -6492,54 +6920,54 @@ function BrandProfileEditor({
6492
6920
  ...value.typography?.sans ? { "--uix-font-sans": value.typography.sans } : {},
6493
6921
  ...value.typography?.heading ? { "--uix-font-heading": value.typography.heading } : {}
6494
6922
  };
6495
- return /* @__PURE__ */ (0, import_jsx_runtime71.jsxs)("section", { className: cx("uix-brand-profiles", className), "aria-label": labels.region, children: [
6496
- /* @__PURE__ */ (0, import_jsx_runtime71.jsxs)("div", { className: "uix-brand-profiles__form", children: [
6497
- profiles.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime71.jsxs)("label", { className: "uix-field__label", children: [
6923
+ return /* @__PURE__ */ (0, import_jsx_runtime72.jsxs)("section", { className: cx("uix-brand-profiles", className), "aria-label": labels.region, children: [
6924
+ /* @__PURE__ */ (0, import_jsx_runtime72.jsxs)("div", { className: "uix-brand-profiles__form", children: [
6925
+ profiles.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime72.jsxs)("label", { className: "uix-field__label", children: [
6498
6926
  labels.profile,
6499
- /* @__PURE__ */ (0, import_jsx_runtime71.jsx)("select", { className: "uix-select", value: value.id, onChange: (event) => {
6927
+ /* @__PURE__ */ (0, import_jsx_runtime72.jsx)("select", { className: "uix-select", value: value.id, onChange: (event) => {
6500
6928
  const selected = profiles.find((profile) => profile.id === event.currentTarget.value);
6501
6929
  if (selected) onSelectProfile?.(selected);
6502
- }, children: profiles.map((profile) => /* @__PURE__ */ (0, import_jsx_runtime71.jsx)("option", { value: profile.id, children: profile.name }, profile.id)) })
6930
+ }, children: profiles.map((profile) => /* @__PURE__ */ (0, import_jsx_runtime72.jsx)("option", { value: profile.id, children: profile.name }, profile.id)) })
6503
6931
  ] }),
6504
- /* @__PURE__ */ (0, import_jsx_runtime71.jsxs)("label", { className: "uix-field__label", children: [
6932
+ /* @__PURE__ */ (0, import_jsx_runtime72.jsxs)("label", { className: "uix-field__label", children: [
6505
6933
  labels.name,
6506
- /* @__PURE__ */ (0, import_jsx_runtime71.jsx)("input", { className: "uix-input", value: value.name, onChange: (event) => update({ name: event.currentTarget.value }) })
6934
+ /* @__PURE__ */ (0, import_jsx_runtime72.jsx)("input", { className: "uix-input", value: value.name, onChange: (event) => update({ name: event.currentTarget.value }) })
6507
6935
  ] }),
6508
- /* @__PURE__ */ (0, import_jsx_runtime71.jsxs)("div", { className: "uix-brand-profiles__colors", children: [
6509
- /* @__PURE__ */ (0, import_jsx_runtime71.jsxs)("label", { children: [
6936
+ /* @__PURE__ */ (0, import_jsx_runtime72.jsxs)("div", { className: "uix-brand-profiles__colors", children: [
6937
+ /* @__PURE__ */ (0, import_jsx_runtime72.jsxs)("label", { children: [
6510
6938
  labels.brand,
6511
- /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(ColorPicker, { label: labels.brandColor, value: value.brand, foreground: value.brandForeground, presets: colorPresets, onChange: (brand) => update({ brand }) })
6939
+ /* @__PURE__ */ (0, import_jsx_runtime72.jsx)(ColorPicker, { label: labels.brandColor, value: value.brand, foreground: value.brandForeground, presets: colorPresets, onChange: (brand) => update({ brand }) })
6512
6940
  ] }),
6513
- /* @__PURE__ */ (0, import_jsx_runtime71.jsxs)("label", { children: [
6941
+ /* @__PURE__ */ (0, import_jsx_runtime72.jsxs)("label", { children: [
6514
6942
  labels.onBrand,
6515
- /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(ColorPicker, { label: labels.onBrandColor, value: value.brandForeground, foreground: value.brand, presets: colorPresets, onChange: (brandForeground) => update({ brandForeground }) })
6943
+ /* @__PURE__ */ (0, import_jsx_runtime72.jsx)(ColorPicker, { label: labels.onBrandColor, value: value.brandForeground, foreground: value.brand, presets: colorPresets, onChange: (brandForeground) => update({ brandForeground }) })
6516
6944
  ] })
6517
6945
  ] }),
6518
- /* @__PURE__ */ (0, import_jsx_runtime71.jsxs)("label", { className: "uix-field__label", children: [
6946
+ /* @__PURE__ */ (0, import_jsx_runtime72.jsxs)("label", { className: "uix-field__label", children: [
6519
6947
  labels.bodyFont,
6520
- /* @__PURE__ */ (0, import_jsx_runtime71.jsx)("input", { className: "uix-input", value: value.typography?.sans ?? "", onChange: (event) => update({ typography: { ...value.typography, sans: event.currentTarget.value || void 0 } }) })
6948
+ /* @__PURE__ */ (0, import_jsx_runtime72.jsx)("input", { className: "uix-input", value: value.typography?.sans ?? "", onChange: (event) => update({ typography: { ...value.typography, sans: event.currentTarget.value || void 0 } }) })
6521
6949
  ] }),
6522
- /* @__PURE__ */ (0, import_jsx_runtime71.jsxs)("label", { className: "uix-field__label", children: [
6950
+ /* @__PURE__ */ (0, import_jsx_runtime72.jsxs)("label", { className: "uix-field__label", children: [
6523
6951
  labels.headingFont,
6524
- /* @__PURE__ */ (0, import_jsx_runtime71.jsx)("input", { className: "uix-input", value: value.typography?.heading ?? "", onChange: (event) => update({ typography: { ...value.typography, heading: event.currentTarget.value || void 0 } }) })
6952
+ /* @__PURE__ */ (0, import_jsx_runtime72.jsx)("input", { className: "uix-input", value: value.typography?.heading ?? "", onChange: (event) => update({ typography: { ...value.typography, heading: event.currentTarget.value || void 0 } }) })
6525
6953
  ] }),
6526
- /* @__PURE__ */ (0, import_jsx_runtime71.jsxs)("label", { className: "uix-file-upload uix-brand-profiles__upload", children: [
6954
+ /* @__PURE__ */ (0, import_jsx_runtime72.jsxs)("label", { className: "uix-file-upload uix-brand-profiles__upload", children: [
6527
6955
  labels.logoFile,
6528
- /* @__PURE__ */ (0, import_jsx_runtime71.jsx)("input", { type: "file", accept: "image/*", onChange: onFile })
6956
+ /* @__PURE__ */ (0, import_jsx_runtime72.jsx)("input", { type: "file", accept: "image/*", onChange: onFile })
6529
6957
  ] }),
6530
- /* @__PURE__ */ (0, import_jsx_runtime71.jsx)("button", { type: "button", className: "uix-btn uix-btn--primary", onClick: apply, children: labels.apply }),
6531
- /* @__PURE__ */ (0, import_jsx_runtime71.jsx)("span", { className: "uix-visually-hidden", "aria-live": "polite", children: announcement })
6958
+ /* @__PURE__ */ (0, import_jsx_runtime72.jsx)("button", { type: "button", className: "uix-btn uix-btn--primary", onClick: apply, children: labels.apply }),
6959
+ /* @__PURE__ */ (0, import_jsx_runtime72.jsx)("span", { className: "uix-visually-hidden", "aria-live": "polite", children: announcement })
6532
6960
  ] }),
6533
- /* @__PURE__ */ (0, import_jsx_runtime71.jsxs)("div", { className: "uix-brand-profiles__preview", style: previewStyle, "aria-label": fillLabel(labels.preview, { name: value.name }), children: [
6534
- /* @__PURE__ */ (0, import_jsx_runtime71.jsxs)("div", { className: "uix-brand-profiles__preview-header", children: [
6535
- value.logo ? /* @__PURE__ */ (0, import_jsx_runtime71.jsx)("img", { src: value.logo.src, alt: value.logo.alt }) : /* @__PURE__ */ (0, import_jsx_runtime71.jsx)("span", { className: "uix-brand-profiles__logo-placeholder", children: labels.logoPlaceholder }),
6536
- /* @__PURE__ */ (0, import_jsx_runtime71.jsx)("strong", { children: value.name || labels.previewTitleFallback })
6961
+ /* @__PURE__ */ (0, import_jsx_runtime72.jsxs)("div", { className: "uix-brand-profiles__preview", style: previewStyle, "aria-label": fillLabel(labels.preview, { name: value.name }), children: [
6962
+ /* @__PURE__ */ (0, import_jsx_runtime72.jsxs)("div", { className: "uix-brand-profiles__preview-header", children: [
6963
+ value.logo ? /* @__PURE__ */ (0, import_jsx_runtime72.jsx)("img", { src: value.logo.src, alt: value.logo.alt }) : /* @__PURE__ */ (0, import_jsx_runtime72.jsx)("span", { className: "uix-brand-profiles__logo-placeholder", children: labels.logoPlaceholder }),
6964
+ /* @__PURE__ */ (0, import_jsx_runtime72.jsx)("strong", { children: value.name || labels.previewTitleFallback })
6537
6965
  ] }),
6538
- /* @__PURE__ */ (0, import_jsx_runtime71.jsxs)("div", { className: "uix-brand-profiles__preview-body", children: [
6539
- /* @__PURE__ */ (0, import_jsx_runtime71.jsx)("h3", { children: labels.previewHeading }),
6540
- /* @__PURE__ */ (0, import_jsx_runtime71.jsx)("p", { children: labels.previewBody }),
6541
- /* @__PURE__ */ (0, import_jsx_runtime71.jsx)("button", { type: "button", className: "uix-btn uix-btn--primary", children: labels.previewPrimary }),
6542
- /* @__PURE__ */ (0, import_jsx_runtime71.jsx)("a", { href: "#brand-profile-preview", children: labels.previewLink })
6966
+ /* @__PURE__ */ (0, import_jsx_runtime72.jsxs)("div", { className: "uix-brand-profiles__preview-body", children: [
6967
+ /* @__PURE__ */ (0, import_jsx_runtime72.jsx)("h3", { children: labels.previewHeading }),
6968
+ /* @__PURE__ */ (0, import_jsx_runtime72.jsx)("p", { children: labels.previewBody }),
6969
+ /* @__PURE__ */ (0, import_jsx_runtime72.jsx)("button", { type: "button", className: "uix-btn uix-btn--primary", children: labels.previewPrimary }),
6970
+ /* @__PURE__ */ (0, import_jsx_runtime72.jsx)("a", { href: "#brand-profile-preview", children: labels.previewLink })
6543
6971
  ] })
6544
6972
  ] })
6545
6973
  ] });
@@ -6598,7 +7026,7 @@ function summarizeDiff(entries, resolutions = {}) {
6598
7026
  }
6599
7027
 
6600
7028
  // src/components/DiffViewer.tsx
6601
- var import_jsx_runtime72 = require("react/jsx-runtime");
7029
+ var import_jsx_runtime73 = require("react/jsx-runtime");
6602
7030
  var DEFAULT_DIFF_VIEWER_LABELS = {
6603
7031
  base: "Base",
6604
7032
  current: "Current",
@@ -6618,6 +7046,9 @@ var DEFAULT_DIFF_VIEWER_LABELS = {
6618
7046
  acceptIncoming: "Accept incoming",
6619
7047
  keepCurrent: "Keep current",
6620
7048
  markPending: "Mark pending",
7049
+ acceptIncomingFor: "Accept incoming for {path}",
7050
+ keepCurrentFor: "Keep current for {path}",
7051
+ markPendingFor: "Mark pending for {path}",
6621
7052
  resolutionAccept: "accepted",
6622
7053
  resolutionSkip: "kept",
6623
7054
  resolutionPending: "pending",
@@ -6634,10 +7065,12 @@ function DiffViewer({
6634
7065
  resolutions: controlledResolutions,
6635
7066
  onResolutionChange,
6636
7067
  labels: labelOverrides,
7068
+ controlSize = "sm",
6637
7069
  className
6638
7070
  }) {
6639
7071
  const labels = { ...DEFAULT_DIFF_VIEWER_LABELS, ...labelOverrides };
6640
7072
  const resolutionLabel = { accept: labels.resolutionAccept, skip: labels.resolutionSkip, pending: labels.resolutionPending };
7073
+ const buttonSize = controlSize === "md" ? void 0 : `uix-btn--${controlSize}`;
6641
7074
  const id = (0, import_react49.useId)();
6642
7075
  const entries = (0, import_react49.useMemo)(() => providedEntries ?? buildThreeWayDiff(base, current, incoming), [providedEntries, base, current, incoming]);
6643
7076
  const [internalResolutions, setInternalResolutions] = (0, import_react49.useState)({});
@@ -6647,24 +7080,24 @@ function DiffViewer({
6647
7080
  if (controlledResolutions === void 0) setInternalResolutions((currentState) => ({ ...currentState, [path]: resolution }));
6648
7081
  onResolutionChange?.(path, resolution);
6649
7082
  };
6650
- if (entries.length === 0) return /* @__PURE__ */ (0, import_jsx_runtime72.jsxs)("section", { className: cx("uix-diff-viewer uix-diff-viewer--empty", className), "aria-label": labels.region, children: [
6651
- /* @__PURE__ */ (0, import_jsx_runtime72.jsx)("h3", { children: labels.noDifferences }),
6652
- /* @__PURE__ */ (0, import_jsx_runtime72.jsx)("p", { children: labels.noDifferencesDetail })
7083
+ if (entries.length === 0) return /* @__PURE__ */ (0, import_jsx_runtime73.jsxs)("section", { className: cx("uix-diff-viewer uix-diff-viewer--empty", className), "aria-label": labels.region, children: [
7084
+ /* @__PURE__ */ (0, import_jsx_runtime73.jsx)("h3", { children: labels.noDifferences }),
7085
+ /* @__PURE__ */ (0, import_jsx_runtime73.jsx)("p", { children: labels.noDifferencesDetail })
6653
7086
  ] });
6654
- return /* @__PURE__ */ (0, import_jsx_runtime72.jsxs)("section", { className: cx("uix-diff-viewer", className), "aria-label": labels.region, children: [
6655
- /* @__PURE__ */ (0, import_jsx_runtime72.jsxs)("div", { className: "uix-diff-viewer__summary", "aria-label": labels.summary, children: [
6656
- GROUPS.map((kind) => /* @__PURE__ */ (0, import_jsx_runtime72.jsxs)("span", { children: [
6657
- /* @__PURE__ */ (0, import_jsx_runtime72.jsx)("b", { children: summary[kind] }),
7087
+ return /* @__PURE__ */ (0, import_jsx_runtime73.jsxs)("section", { className: cx("uix-diff-viewer", className), "aria-label": labels.region, "data-control-size": controlSize, children: [
7088
+ /* @__PURE__ */ (0, import_jsx_runtime73.jsxs)("div", { className: "uix-diff-viewer__summary", role: "group", "aria-label": labels.summary, children: [
7089
+ GROUPS.map((kind) => /* @__PURE__ */ (0, import_jsx_runtime73.jsxs)("span", { children: [
7090
+ /* @__PURE__ */ (0, import_jsx_runtime73.jsx)("b", { children: summary[kind] }),
6658
7091
  " ",
6659
7092
  labels[kind].toLowerCase()
6660
7093
  ] }, kind)),
6661
- /* @__PURE__ */ (0, import_jsx_runtime72.jsxs)("span", { children: [
6662
- /* @__PURE__ */ (0, import_jsx_runtime72.jsx)("b", { children: summary.resolved }),
7094
+ /* @__PURE__ */ (0, import_jsx_runtime73.jsxs)("span", { children: [
7095
+ /* @__PURE__ */ (0, import_jsx_runtime73.jsx)("b", { children: summary.resolved }),
6663
7096
  " ",
6664
7097
  labels.resolved
6665
7098
  ] }),
6666
- /* @__PURE__ */ (0, import_jsx_runtime72.jsxs)("span", { children: [
6667
- /* @__PURE__ */ (0, import_jsx_runtime72.jsx)("b", { children: summary.pending }),
7099
+ /* @__PURE__ */ (0, import_jsx_runtime73.jsxs)("span", { children: [
7100
+ /* @__PURE__ */ (0, import_jsx_runtime73.jsx)("b", { children: summary.pending }),
6668
7101
  " ",
6669
7102
  labels.pending
6670
7103
  ] })
@@ -6672,33 +7105,33 @@ function DiffViewer({
6672
7105
  GROUPS.map((kind) => {
6673
7106
  const grouped = entries.filter((entry) => entry.kind === kind);
6674
7107
  if (!grouped.length) return null;
6675
- return /* @__PURE__ */ (0, import_jsx_runtime72.jsxs)("section", { className: "uix-diff-viewer__group", "aria-labelledby": `${id}-${kind}`, children: [
6676
- /* @__PURE__ */ (0, import_jsx_runtime72.jsxs)("h3", { id: `${id}-${kind}`, children: [
7108
+ return /* @__PURE__ */ (0, import_jsx_runtime73.jsxs)("section", { className: "uix-diff-viewer__group", "aria-labelledby": `${id}-${kind}`, children: [
7109
+ /* @__PURE__ */ (0, import_jsx_runtime73.jsxs)("h3", { id: `${id}-${kind}`, children: [
6677
7110
  labels[kind],
6678
7111
  " ",
6679
- /* @__PURE__ */ (0, import_jsx_runtime72.jsx)("span", { children: grouped.length })
7112
+ /* @__PURE__ */ (0, import_jsx_runtime73.jsx)("span", { children: grouped.length })
6680
7113
  ] }),
6681
7114
  grouped.map((entry) => {
6682
7115
  const resolution = resolutions[entry.path] ?? "pending";
6683
- return /* @__PURE__ */ (0, import_jsx_runtime72.jsxs)("details", { className: "uix-diff-viewer__entry", "data-kind": entry.kind, open: entry.kind === "conflicted", children: [
6684
- /* @__PURE__ */ (0, import_jsx_runtime72.jsxs)("summary", { children: [
6685
- /* @__PURE__ */ (0, import_jsx_runtime72.jsx)("code", { children: entry.path }),
6686
- /* @__PURE__ */ (0, import_jsx_runtime72.jsx)(StatusPill, { tone: resolution === "pending" ? "warning" : "success", children: resolutionLabel[resolution] })
7116
+ return /* @__PURE__ */ (0, import_jsx_runtime73.jsxs)("details", { className: "uix-diff-viewer__entry", "data-kind": entry.kind, open: entry.kind === "conflicted", children: [
7117
+ /* @__PURE__ */ (0, import_jsx_runtime73.jsxs)("summary", { children: [
7118
+ /* @__PURE__ */ (0, import_jsx_runtime73.jsx)("code", { children: entry.path }),
7119
+ /* @__PURE__ */ (0, import_jsx_runtime73.jsx)(StatusPill, { tone: resolution === "pending" ? "warning" : "success", children: resolutionLabel[resolution] })
6687
7120
  ] }),
6688
- /* @__PURE__ */ (0, import_jsx_runtime72.jsx)("div", { className: "uix-diff-viewer__versions", children: ["base", "current", "incoming"].map((version) => /* @__PURE__ */ (0, import_jsx_runtime72.jsxs)("div", { role: "region", "aria-label": fillLabel(labels.valueFor, { version: labels[version], path: entry.path }), children: [
6689
- /* @__PURE__ */ (0, import_jsx_runtime72.jsx)("strong", { children: labels[version] }),
6690
- /* @__PURE__ */ (0, import_jsx_runtime72.jsx)("pre", { children: renderValue(entry[version], labels.notPresent) })
7121
+ /* @__PURE__ */ (0, import_jsx_runtime73.jsx)("div", { className: "uix-diff-viewer__versions", children: ["base", "current", "incoming"].map((version) => /* @__PURE__ */ (0, import_jsx_runtime73.jsxs)("div", { role: "region", "aria-label": fillLabel(labels.valueFor, { version: labels[version], path: entry.path }), children: [
7122
+ /* @__PURE__ */ (0, import_jsx_runtime73.jsx)("strong", { children: labels[version] }),
7123
+ /* @__PURE__ */ (0, import_jsx_runtime73.jsx)("pre", { children: renderValue(entry[version], labels.notPresent) })
6691
7124
  ] }, version)) }),
6692
- /* @__PURE__ */ (0, import_jsx_runtime72.jsxs)("div", { className: "uix-diff-viewer__actions", "aria-label": fillLabel(labels.resolve, { path: entry.path }), children: [
6693
- /* @__PURE__ */ (0, import_jsx_runtime72.jsx)("button", { type: "button", className: "uix-btn uix-btn--primary uix-btn--sm", "aria-pressed": resolution === "accept", onClick: () => resolve2(entry.path, "accept"), children: labels.acceptIncoming }),
6694
- /* @__PURE__ */ (0, import_jsx_runtime72.jsx)("button", { type: "button", className: "uix-btn uix-btn--secondary uix-btn--sm", "aria-pressed": resolution === "skip", onClick: () => resolve2(entry.path, "skip"), children: labels.keepCurrent }),
6695
- /* @__PURE__ */ (0, import_jsx_runtime72.jsx)("button", { type: "button", className: "uix-btn uix-btn--ghost uix-btn--sm", "aria-pressed": resolution === "pending", onClick: () => resolve2(entry.path, "pending"), children: labels.markPending })
7125
+ /* @__PURE__ */ (0, import_jsx_runtime73.jsxs)("div", { className: "uix-diff-viewer__actions", role: "group", "aria-label": fillLabel(labels.resolve, { path: entry.path }), children: [
7126
+ /* @__PURE__ */ (0, import_jsx_runtime73.jsx)("button", { type: "button", className: cx("uix-btn uix-btn--primary", buttonSize), "aria-label": fillLabel(labels.acceptIncomingFor, { path: entry.path }), "aria-pressed": resolution === "accept", onClick: () => resolve2(entry.path, "accept"), children: labels.acceptIncoming }),
7127
+ /* @__PURE__ */ (0, import_jsx_runtime73.jsx)("button", { type: "button", className: cx("uix-btn uix-btn--secondary", buttonSize), "aria-label": fillLabel(labels.keepCurrentFor, { path: entry.path }), "aria-pressed": resolution === "skip", onClick: () => resolve2(entry.path, "skip"), children: labels.keepCurrent }),
7128
+ /* @__PURE__ */ (0, import_jsx_runtime73.jsx)("button", { type: "button", className: cx("uix-btn uix-btn--ghost", buttonSize), "aria-label": fillLabel(labels.markPendingFor, { path: entry.path }), "aria-pressed": resolution === "pending", onClick: () => resolve2(entry.path, "pending"), children: labels.markPending })
6696
7129
  ] })
6697
7130
  ] }, entry.path);
6698
7131
  })
6699
7132
  ] }, kind);
6700
7133
  }),
6701
- /* @__PURE__ */ (0, import_jsx_runtime72.jsx)("p", { className: "uix-visually-hidden", "aria-live": "polite", children: fillLabel(labels.progress, { resolved: summary.resolved, total: entries.length }) })
7134
+ /* @__PURE__ */ (0, import_jsx_runtime73.jsx)("p", { className: "uix-visually-hidden", "aria-live": "polite", children: fillLabel(labels.progress, { resolved: summary.resolved, total: entries.length }) })
6702
7135
  ] });
6703
7136
  }
6704
7137
  // Annotate the CommonJS export names for ESM import in node: