@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/README.md +20 -0
- package/dist/components/DiffViewer.d.ts +15 -1
- package/dist/components/DiffViewer.js +11 -6
- package/dist/components/EditorIcons.d.ts +2 -0
- package/dist/components/EditorIcons.js +3 -1
- package/dist/components/TableControls.d.ts +77 -10
- package/dist/components/TableControls.js +397 -20
- package/dist/emoji.cjs +3 -1
- package/dist/index.cjs +978 -545
- package/dist/index.d.cts +92 -11
- package/dist/index.d.ts +1 -1
- package/dist/rich-text.cjs +3 -1
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -2932,81 +2932,543 @@ function SegmentedOption({
|
|
|
2932
2932
|
}
|
|
2933
2933
|
|
|
2934
2934
|
// src/components/TableControls.tsx
|
|
2935
|
-
var
|
|
2935
|
+
var import_react34 = require("react");
|
|
2936
|
+
|
|
2937
|
+
// src/components/EditorIcons.tsx
|
|
2936
2938
|
var import_jsx_runtime49 = require("react/jsx-runtime");
|
|
2937
|
-
|
|
2938
|
-
|
|
2939
|
-
|
|
2940
|
-
|
|
2941
|
-
|
|
2942
|
-
|
|
2943
|
-
|
|
2944
|
-
|
|
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,
|
|
2947
|
-
|
|
2948
|
-
|
|
2949
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
2952
|
-
/* @__PURE__ */ (0,
|
|
2953
|
-
/* @__PURE__ */ (0,
|
|
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
|
-
|
|
2957
|
-
columnsLabel != null && /* @__PURE__ */ (0,
|
|
2958
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
2964
|
-
/* @__PURE__ */ (0,
|
|
2965
|
-
/* @__PURE__ */ (0,
|
|
2966
|
-
type === "select" || type === "enum" || type === "boolean" ? /* @__PURE__ */ (0,
|
|
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,
|
|
2969
|
-
/* @__PURE__ */ (0,
|
|
2970
|
-
/* @__PURE__ */ (0,
|
|
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
|
-
|
|
2975
|
-
|
|
2976
|
-
|
|
2977
|
-
|
|
2978
|
-
|
|
2979
|
-
|
|
2980
|
-
|
|
2981
|
-
|
|
2982
|
-
|
|
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
|
|
3449
|
+
var import_jsx_runtime52 = require("react/jsx-runtime");
|
|
2988
3450
|
function Timeline({ children, className, ...props }) {
|
|
2989
|
-
return /* @__PURE__ */ (0,
|
|
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,
|
|
2993
|
-
/* @__PURE__ */ (0,
|
|
2994
|
-
node ?? /* @__PURE__ */ (0,
|
|
2995
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
2998
|
-
meta != null && /* @__PURE__ */ (0,
|
|
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
|
|
3006
|
-
var
|
|
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 ?
|
|
3009
|
-
return /* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
3054
|
-
/* @__PURE__ */ (0,
|
|
3055
|
-
/* @__PURE__ */ (0,
|
|
3056
|
-
/* @__PURE__ */ (0,
|
|
3057
|
-
/* @__PURE__ */ (0,
|
|
3058
|
-
description != null && /* @__PURE__ */ (0,
|
|
3059
|
-
meta != null && /* @__PURE__ */ (0,
|
|
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
|
|
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,
|
|
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,
|
|
3100
|
-
icon != null && /* @__PURE__ */ (0,
|
|
3101
|
-
/* @__PURE__ */ (0,
|
|
3102
|
-
eyebrow != null && /* @__PURE__ */ (0,
|
|
3103
|
-
/* @__PURE__ */ (0,
|
|
3104
|
-
meta != null && /* @__PURE__ */ (0,
|
|
3105
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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
|
|
3574
|
+
var import_jsx_runtime55 = require("react/jsx-runtime");
|
|
3113
3575
|
function Prose({ children, className, ...props }) {
|
|
3114
|
-
return /* @__PURE__ */ (0,
|
|
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,
|
|
3118
|
-
icon != null && /* @__PURE__ */ (0,
|
|
3119
|
-
/* @__PURE__ */ (0,
|
|
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
|
|
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,
|
|
3179
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
3193
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
3199
|
-
label != null && /* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
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
|
|
3661
|
+
var import_jsx_runtime57 = require("react/jsx-runtime");
|
|
3234
3662
|
function Inbox({ view, children, className, ...props }) {
|
|
3235
|
-
return /* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
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,
|
|
3318
|
-
preview != null && /* @__PURE__ */ (0,
|
|
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,
|
|
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
|
|
3758
|
+
var import_jsx_runtime58 = require("react/jsx-runtime");
|
|
3331
3759
|
function Kanban({ announcement, children, className, ...props }) {
|
|
3332
|
-
return /* @__PURE__ */ (0,
|
|
3333
|
-
announcement != null && /* @__PURE__ */ (0,
|
|
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,
|
|
3341
|
-
hasHead && /* @__PURE__ */ (0,
|
|
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,
|
|
3771
|
+
count != null && /* @__PURE__ */ (0, import_jsx_runtime58.jsx)("span", { className: "uix-kanban__count", children: count })
|
|
3344
3772
|
] }),
|
|
3345
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
3374
|
-
meta && /* @__PURE__ */ (0,
|
|
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
|
|
3441
|
-
var ChevronIcon2 = () => /* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
3910
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(ChevronIcon2, {})
|
|
3483
3911
|
}
|
|
3484
3912
|
)
|
|
3485
|
-
) : /* @__PURE__ */ (0,
|
|
3486
|
-
node.icon && /* @__PURE__ */ (0,
|
|
3487
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
4194
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(ChevronIcon2, {})
|
|
3767
4195
|
}
|
|
3768
4196
|
)
|
|
3769
|
-
) : /* @__PURE__ */ (0,
|
|
3770
|
-
f.node.icon && /* @__PURE__ */ (0,
|
|
3771
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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
|
|
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,
|
|
3798
|
-
/* @__PURE__ */ (0,
|
|
3799
|
-
kicker != null && /* @__PURE__ */ (0,
|
|
3800
|
-
/* @__PURE__ */ (0,
|
|
3801
|
-
lede != null && /* @__PURE__ */ (0,
|
|
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,
|
|
3804
|
-
searchLabel != null && /* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
3813
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
4246
|
+
return /* @__PURE__ */ (0, import_jsx_runtime60.jsxs)("section", { className: cx("uix-notice", className), ...props, children: [
|
|
3819
4247
|
icon,
|
|
3820
|
-
/* @__PURE__ */ (0,
|
|
3821
|
-
/* @__PURE__ */ (0,
|
|
3822
|
-
title != null && /* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
3829
|
-
position != null && /* @__PURE__ */ (0,
|
|
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,
|
|
3848
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
3859
|
-
(eyebrow != null || ordinal != null) && /* @__PURE__ */ (0,
|
|
3860
|
-
ordinal != null && /* @__PURE__ */ (0,
|
|
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,
|
|
3864
|
-
description != null && /* @__PURE__ */ (0,
|
|
3865
|
-
meta != null && /* @__PURE__ */ (0,
|
|
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,
|
|
3872
|
-
/* @__PURE__ */ (0,
|
|
3873
|
-
/* @__PURE__ */ (0,
|
|
3874
|
-
eyebrow != null && /* @__PURE__ */ (0,
|
|
3875
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
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,
|
|
3893
|
-
/* @__PURE__ */ (0,
|
|
3894
|
-
topic != null && /* @__PURE__ */ (0,
|
|
3895
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
3903
|
-
meta != null && /* @__PURE__ */ (0,
|
|
3904
|
-
/* @__PURE__ */ (0,
|
|
3905
|
-
summary != null && /* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
3913
|
-
/* @__PURE__ */ (0,
|
|
3914
|
-
/* @__PURE__ */ (0,
|
|
3915
|
-
meta != null && /* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
3925
|
-
items?.map((item, i) => /* @__PURE__ */ (0,
|
|
3926
|
-
/* @__PURE__ */ (0,
|
|
3927
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
3934
|
-
/* @__PURE__ */ (0,
|
|
3935
|
-
/* @__PURE__ */ (0,
|
|
3936
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
3939
|
-
/* @__PURE__ */ (0,
|
|
3940
|
-
meta != null && /* @__PURE__ */ (0,
|
|
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,
|
|
4373
|
+
return /* @__PURE__ */ (0, import_jsx_runtime60.jsxs)("div", { className: cx("uix-status-row", className), ...props, children: [
|
|
3946
4374
|
indicator,
|
|
3947
|
-
/* @__PURE__ */ (0,
|
|
3948
|
-
meta != null && /* @__PURE__ */ (0,
|
|
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
|
|
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,
|
|
4101
|
-
/* @__PURE__ */ (0,
|
|
4102
|
-
/* @__PURE__ */ (0,
|
|
4103
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
4106
|
-
/* @__PURE__ */ (0,
|
|
4107
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
4112
|
-
/* @__PURE__ */ (0,
|
|
4113
|
-
/* @__PURE__ */ (0,
|
|
4114
|
-
] }, node.id) : /* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
4128
|
-
/* @__PURE__ */ (0,
|
|
4129
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
4143
|
-
/* @__PURE__ */ (0,
|
|
4144
|
-
/* @__PURE__ */ (0,
|
|
4145
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
4148
|
-
/* @__PURE__ */ (0,
|
|
4149
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
4157
|
-
/* @__PURE__ */ (0,
|
|
4158
|
-
/* @__PURE__ */ (0,
|
|
4159
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
4190
|
-
/* @__PURE__ */ (0,
|
|
4191
|
-
issues.length > 0 && /* @__PURE__ */ (0,
|
|
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,
|
|
4195
|
-
/* @__PURE__ */ (0,
|
|
4196
|
-
/* @__PURE__ */ (0,
|
|
4197
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
4201
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
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,
|
|
4229
|
-
/* @__PURE__ */ (0,
|
|
4230
|
-
/* @__PURE__ */ (0,
|
|
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
|
|
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,
|
|
4317
|
-
/* @__PURE__ */ (0,
|
|
4318
|
-
/* @__PURE__ */ (0,
|
|
4319
|
-
palette.length === 0 ? /* @__PURE__ */ (0,
|
|
4320
|
-
/* @__PURE__ */ (0,
|
|
4321
|
-
item.description && /* @__PURE__ */ (0,
|
|
4322
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
4326
|
-
/* @__PURE__ */ (0,
|
|
4327
|
-
loading ? /* @__PURE__ */ (0,
|
|
4328
|
-
/* @__PURE__ */ (0,
|
|
4329
|
-
onRetry && /* @__PURE__ */ (0,
|
|
4330
|
-
] }) : items.length === 0 ? /* @__PURE__ */ (0,
|
|
4331
|
-
/* @__PURE__ */ (0,
|
|
4332
|
-
palette[0] && /* @__PURE__ */ (0,
|
|
4333
|
-
] }) : /* @__PURE__ */ (0,
|
|
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,
|
|
4344
|
-
/* @__PURE__ */ (0,
|
|
4345
|
-
item.description && /* @__PURE__ */ (0,
|
|
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,
|
|
4348
|
-
/* @__PURE__ */ (0,
|
|
4349
|
-
/* @__PURE__ */ (0,
|
|
4350
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
4358
|
-
/* @__PURE__ */ (0,
|
|
4359
|
-
!selected ? /* @__PURE__ */ (0,
|
|
4360
|
-
/* @__PURE__ */ (0,
|
|
4361
|
-
/* @__PURE__ */ (0,
|
|
4362
|
-
/* @__PURE__ */ (0,
|
|
4363
|
-
/* @__PURE__ */ (0,
|
|
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
|
|
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,
|
|
4544
|
-
/* @__PURE__ */ (0,
|
|
4545
|
-
/* @__PURE__ */ (0,
|
|
4546
|
-
/* @__PURE__ */ (0,
|
|
4547
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
4550
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
4553
|
-
/* @__PURE__ */ (0,
|
|
4554
|
-
onRetry && /* @__PURE__ */ (0,
|
|
4555
|
-
] }) : view === "agenda" ? /* @__PURE__ */ (0,
|
|
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,
|
|
4558
|
-
/* @__PURE__ */ (0,
|
|
4559
|
-
/* @__PURE__ */ (0,
|
|
4560
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
4993
|
+
entry.meta && /* @__PURE__ */ (0, import_jsx_runtime63.jsx)("span", { children: entry.meta })
|
|
4566
4994
|
] }),
|
|
4567
|
-
/* @__PURE__ */ (0,
|
|
4995
|
+
/* @__PURE__ */ (0, import_jsx_runtime63.jsx)(StatusPill, { tone: stateTone(state), children: stateLabel[state] })
|
|
4568
4996
|
] }) }, entry.id);
|
|
4569
|
-
}) }) }) : /* @__PURE__ */ (0,
|
|
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,
|
|
4573
|
-
/* @__PURE__ */ (0,
|
|
4574
|
-
dayOverlays.map((overlay) => /* @__PURE__ */ (0,
|
|
4575
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
4579
|
-
/* @__PURE__ */ (0,
|
|
4580
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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
|
|
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,
|
|
4686
|
-
/* @__PURE__ */ (0,
|
|
4687
|
-
/* @__PURE__ */ (0,
|
|
4688
|
-
/* @__PURE__ */ (0,
|
|
4689
|
-
/* @__PURE__ */ (0,
|
|
4690
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
4694
|
-
/* @__PURE__ */ (0,
|
|
4695
|
-
/* @__PURE__ */ (0,
|
|
4696
|
-
/* @__PURE__ */ (0,
|
|
4697
|
-
Array.from({ length: ((/* @__PURE__ */ new Date(`${month}T00:00:00Z`)).getUTCDay() + 6) % 7 }, (_, index) => /* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
4723
|
-
rangeInvalid && /* @__PURE__ */ (0,
|
|
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
|
|
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,
|
|
5224
|
-
/* @__PURE__ */ (0,
|
|
5225
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
5228
|
-
/* @__PURE__ */ (0,
|
|
5229
|
-
/* @__PURE__ */ (0,
|
|
5230
|
-
node.type && /* @__PURE__ */ (0,
|
|
5231
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
5234
|
-
onExpandNeighbors && /* @__PURE__ */ (0,
|
|
5235
|
-
onOpenDetails && /* @__PURE__ */ (0,
|
|
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
|
|
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,
|
|
5517
|
-
/* @__PURE__ */ (0,
|
|
5518
|
-
/* @__PURE__ */ (0,
|
|
5519
|
-
/* @__PURE__ */ (0,
|
|
5520
|
-
/* @__PURE__ */ (0,
|
|
5521
|
-
/* @__PURE__ */ (0,
|
|
5522
|
-
/* @__PURE__ */ (0,
|
|
5523
|
-
/* @__PURE__ */ (0,
|
|
5524
|
-
/* @__PURE__ */ (0,
|
|
5525
|
-
/* @__PURE__ */ (0,
|
|
5526
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
5529
|
-
/* @__PURE__ */ (0,
|
|
5530
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
5541
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
5555
|
-
edge.arrow !== "none" && /* @__PURE__ */ (0,
|
|
5556
|
-
showLabel(edge) && /* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
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,
|
|
5576
|
-
/* @__PURE__ */ (0,
|
|
5577
|
-
/* @__PURE__ */ (0,
|
|
5578
|
-
] }) : renderNode?.(item.node, { selected, dimmed }) ?? /* @__PURE__ */ (0,
|
|
5579
|
-
/* @__PURE__ */ (0,
|
|
5580
|
-
(item.node.type || item.node.description) && /* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
5638
|
-
showList && /* @__PURE__ */ (0,
|
|
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
|
|
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,
|
|
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,
|
|
5724
|
-
/* @__PURE__ */ (0,
|
|
5725
|
-
props.onRetry && /* @__PURE__ */ (0,
|
|
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,
|
|
5729
|
-
/* @__PURE__ */ (0,
|
|
5730
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
5733
|
-
return /* @__PURE__ */ (0,
|
|
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,
|
|
5787
|
-
/* @__PURE__ */ (0,
|
|
5788
|
-
/* @__PURE__ */ (0,
|
|
5789
|
-
/* @__PURE__ */ (0,
|
|
5790
|
-
/* @__PURE__ */ (0,
|
|
5791
|
-
/* @__PURE__ */ (0,
|
|
5792
|
-
/* @__PURE__ */ (0,
|
|
5793
|
-
/* @__PURE__ */ (0,
|
|
5794
|
-
/* @__PURE__ */ (0,
|
|
5795
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
5798
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
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,
|
|
5821
|
-
/* @__PURE__ */ (0,
|
|
5822
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
5829
|
-
showList && /* @__PURE__ */ (0,
|
|
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
|
|
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,
|
|
5931
|
-
if (error) return /* @__PURE__ */ (0,
|
|
5932
|
-
/* @__PURE__ */ (0,
|
|
5933
|
-
onRetry && /* @__PURE__ */ (0,
|
|
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,
|
|
5936
|
-
/* @__PURE__ */ (0,
|
|
5937
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
5940
|
-
/* @__PURE__ */ (0,
|
|
5941
|
-
/* @__PURE__ */ (0,
|
|
5942
|
-
/* @__PURE__ */ (0,
|
|
5943
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
5946
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
5951
|
-
/* @__PURE__ */ (0,
|
|
5952
|
-
/* @__PURE__ */ (0,
|
|
5953
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
5956
|
-
/* @__PURE__ */ (0,
|
|
5957
|
-
/* @__PURE__ */ (0,
|
|
5958
|
-
/* @__PURE__ */ (0,
|
|
5959
|
-
/* @__PURE__ */ (0,
|
|
5960
|
-
fields.map((field) => /* @__PURE__ */ (0,
|
|
5961
|
-
/* @__PURE__ */ (0,
|
|
5962
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
6392
|
+
/* @__PURE__ */ (0, import_jsx_runtime68.jsx)("tbody", { children: candidates.map((candidate) => {
|
|
5965
6393
|
const resolved = candidate.status === "resolved";
|
|
5966
|
-
return /* @__PURE__ */ (0,
|
|
5967
|
-
/* @__PURE__ */ (0,
|
|
5968
|
-
/* @__PURE__ */ (0,
|
|
5969
|
-
fields.map((field) => /* @__PURE__ */ (0,
|
|
5970
|
-
/* @__PURE__ */ (0,
|
|
5971
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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
|
|
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,
|
|
6065
|
-
/* @__PURE__ */ (0,
|
|
6066
|
-
/* @__PURE__ */ (0,
|
|
6067
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
6087
|
-
/* @__PURE__ */ (0,
|
|
6088
|
-
/* @__PURE__ */ (0,
|
|
6089
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
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
|
|
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,
|
|
6123
|
-
/* @__PURE__ */ (0,
|
|
6124
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
6132
|
-
/* @__PURE__ */ (0,
|
|
6133
|
-
over > 0 && /* @__PURE__ */ (0,
|
|
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,
|
|
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
|
|
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,
|
|
6302
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
6315
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
6331
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
6762
|
+
/* @__PURE__ */ (0, import_jsx_runtime71.jsxs)("span", { children: [
|
|
6335
6763
|
Math.round(hsv.h),
|
|
6336
6764
|
"\xB0"
|
|
6337
6765
|
] }),
|
|
6338
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
6768
|
+
/* @__PURE__ */ (0, import_jsx_runtime71.jsxs)("label", { className: "uix-color-picker__range", children: [
|
|
6341
6769
|
labels.saturation,
|
|
6342
6770
|
" ",
|
|
6343
|
-
/* @__PURE__ */ (0,
|
|
6771
|
+
/* @__PURE__ */ (0, import_jsx_runtime71.jsxs)("span", { children: [
|
|
6344
6772
|
Math.round(hsv.s * 100),
|
|
6345
6773
|
"%"
|
|
6346
6774
|
] }),
|
|
6347
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
6777
|
+
/* @__PURE__ */ (0, import_jsx_runtime71.jsxs)("label", { className: "uix-color-picker__range", children: [
|
|
6350
6778
|
labels.brightness,
|
|
6351
6779
|
" ",
|
|
6352
|
-
/* @__PURE__ */ (0,
|
|
6780
|
+
/* @__PURE__ */ (0, import_jsx_runtime71.jsxs)("span", { children: [
|
|
6353
6781
|
Math.round(hsv.v * 100),
|
|
6354
6782
|
"%"
|
|
6355
6783
|
] }),
|
|
6356
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
6786
|
+
/* @__PURE__ */ (0, import_jsx_runtime71.jsxs)("label", { className: "uix-color-picker__hex", children: [
|
|
6359
6787
|
labels.hex,
|
|
6360
|
-
/* @__PURE__ */ (0,
|
|
6361
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
6368
|
-
presets.length > 0 && /* @__PURE__ */ (0,
|
|
6369
|
-
/* @__PURE__ */ (0,
|
|
6370
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
6373
|
-
/* @__PURE__ */ (0,
|
|
6374
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
6378
|
-
/* @__PURE__ */ (0,
|
|
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
|
|
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,
|
|
6496
|
-
/* @__PURE__ */ (0,
|
|
6497
|
-
profiles.length > 0 && /* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
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,
|
|
6932
|
+
/* @__PURE__ */ (0, import_jsx_runtime72.jsxs)("label", { className: "uix-field__label", children: [
|
|
6505
6933
|
labels.name,
|
|
6506
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
6509
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
6941
|
+
/* @__PURE__ */ (0, import_jsx_runtime72.jsxs)("label", { children: [
|
|
6514
6942
|
labels.onBrand,
|
|
6515
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
6946
|
+
/* @__PURE__ */ (0, import_jsx_runtime72.jsxs)("label", { className: "uix-field__label", children: [
|
|
6519
6947
|
labels.bodyFont,
|
|
6520
|
-
/* @__PURE__ */ (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,
|
|
6950
|
+
/* @__PURE__ */ (0, import_jsx_runtime72.jsxs)("label", { className: "uix-field__label", children: [
|
|
6523
6951
|
labels.headingFont,
|
|
6524
|
-
/* @__PURE__ */ (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,
|
|
6954
|
+
/* @__PURE__ */ (0, import_jsx_runtime72.jsxs)("label", { className: "uix-file-upload uix-brand-profiles__upload", children: [
|
|
6527
6955
|
labels.logoFile,
|
|
6528
|
-
/* @__PURE__ */ (0,
|
|
6956
|
+
/* @__PURE__ */ (0, import_jsx_runtime72.jsx)("input", { type: "file", accept: "image/*", onChange: onFile })
|
|
6529
6957
|
] }),
|
|
6530
|
-
/* @__PURE__ */ (0,
|
|
6531
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
6534
|
-
/* @__PURE__ */ (0,
|
|
6535
|
-
value.logo ? /* @__PURE__ */ (0,
|
|
6536
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
6539
|
-
/* @__PURE__ */ (0,
|
|
6540
|
-
/* @__PURE__ */ (0,
|
|
6541
|
-
/* @__PURE__ */ (0,
|
|
6542
|
-
/* @__PURE__ */ (0,
|
|
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
|
|
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,
|
|
6651
|
-
/* @__PURE__ */ (0,
|
|
6652
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
6655
|
-
/* @__PURE__ */ (0,
|
|
6656
|
-
GROUPS.map((kind) => /* @__PURE__ */ (0,
|
|
6657
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
6662
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
6667
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
6676
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
6684
|
-
/* @__PURE__ */ (0,
|
|
6685
|
-
/* @__PURE__ */ (0,
|
|
6686
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
6689
|
-
/* @__PURE__ */ (0,
|
|
6690
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
6693
|
-
/* @__PURE__ */ (0,
|
|
6694
|
-
/* @__PURE__ */ (0,
|
|
6695
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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:
|