@ai-matrx/design-system 0.18.10 → 0.18.13
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/CHANGELOG.md +29 -0
- package/dist/content-transfer/alchemy.svg +1 -1
- package/dist/content-transfer/icon.cjs +3 -1
- package/dist/content-transfer/icon.cjs.map +1 -1
- package/dist/content-transfer/icon.d.cts +3 -2
- package/dist/content-transfer/icon.d.ts +3 -2
- package/dist/content-transfer/icon.js +3 -1
- package/dist/content-transfer/icon.js.map +1 -1
- package/dist/content-transfer.cjs +323 -277
- package/dist/content-transfer.cjs.map +1 -1
- package/dist/content-transfer.css +93 -25
- package/dist/content-transfer.d.cts +1 -1
- package/dist/content-transfer.d.ts +1 -1
- package/dist/content-transfer.js +323 -277
- package/dist/content-transfer.js.map +1 -1
- package/dist/data-table/copy-helpers.d.cts +1 -1
- package/dist/data-table/copy-helpers.d.ts +1 -1
- package/dist/data-table/copy-types.cjs.map +1 -1
- package/dist/data-table/copy-types.d.cts +1 -1
- package/dist/data-table/copy-types.d.ts +1 -1
- package/dist/data-table/data-row-inspector.cjs +325 -276
- package/dist/data-table/data-row-inspector.cjs.map +1 -1
- package/dist/data-table/data-row-inspector.js +325 -276
- package/dist/data-table/data-row-inspector.js.map +1 -1
- package/dist/data-table/data-row-window.cjs +325 -276
- package/dist/data-table/data-row-window.cjs.map +1 -1
- package/dist/data-table/data-row-window.js +325 -276
- package/dist/data-table/data-row-window.js.map +1 -1
- package/dist/data-table/filter-engine.d.cts +1 -1
- package/dist/data-table/filter-engine.d.ts +1 -1
- package/dist/data-table/host.cjs.map +1 -1
- package/dist/data-table/host.d.cts +16 -2
- package/dist/data-table/host.d.ts +16 -2
- package/dist/data-table/host.js.map +1 -1
- package/dist/data-table/index.cjs +463 -398
- package/dist/data-table/index.cjs.map +1 -1
- package/dist/data-table/index.d.cts +3 -3
- package/dist/data-table/index.d.ts +3 -3
- package/dist/data-table/index.js +464 -399
- package/dist/data-table/index.js.map +1 -1
- package/dist/data-table/infer-filter.d.cts +1 -1
- package/dist/data-table/infer-filter.d.ts +1 -1
- package/dist/data-table/layered-filters.d.cts +1 -1
- package/dist/data-table/layered-filters.d.ts +1 -1
- package/dist/data-table/pagination.cjs.map +1 -1
- package/dist/data-table/pagination.js.map +1 -1
- package/dist/data-table/query-control.d.cts +1 -1
- package/dist/data-table/query-control.d.ts +1 -1
- package/dist/data-table/types.cjs.map +1 -1
- package/dist/data-table/types.d.cts +1 -1
- package/dist/data-table/types.d.ts +1 -1
- package/dist/data-table/url-state.d.cts +1 -1
- package/dist/data-table/url-state.d.ts +1 -1
- package/dist/data-table/uuid-cell.cjs.map +1 -1
- package/dist/data-table/uuid-cell.js.map +1 -1
- package/dist/data-table/xlsx.d.cts +1 -1
- package/dist/data-table/xlsx.d.ts +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/{types-C2xN6W_q.d.ts → types-BuDKVpeF.d.ts} +2 -1
- package/dist/{types-D_tpuk6m.d.cts → types-Dqcb7jXO.d.cts} +2 -1
- package/package.json +2 -2
package/dist/content-transfer.js
CHANGED
|
@@ -460,7 +460,8 @@ var PopoverContent = React6.forwardRef(
|
|
|
460
460
|
PopoverContent.displayName = PopoverPrimitive.Content.displayName;
|
|
461
461
|
|
|
462
462
|
// src/content-transfer/icon.ts
|
|
463
|
-
var
|
|
463
|
+
var ALCHEMY_GLYPH_PATHS = ["M9 3h6", "M10 3v6l-5.2 8.7A2 2 0 0 0 6.5 21h11a2 2 0 0 0 1.7-3.3L14 9V3", "M8 15h8"];
|
|
464
|
+
var ALCHEMY_GLYPH_SVG = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round">${ALCHEMY_GLYPH_PATHS.map((d) => `<path d="${d}"/>`).join("")}</svg>`;
|
|
464
465
|
|
|
465
466
|
// src/content-transfer/matrx-copy.tsx
|
|
466
467
|
import * as React7 from "react";
|
|
@@ -617,7 +618,7 @@ function MatrxCopyMenuSession(props) {
|
|
|
617
618
|
if (aiVisible && props.aiCustom)
|
|
618
619
|
actions.push({
|
|
619
620
|
id: "configure-source",
|
|
620
|
-
label: props.aiCustom.label ?? "Customize source
|
|
621
|
+
label: props.aiCustom.label ?? "Customize source",
|
|
621
622
|
...props.aiCustom.hint ? { hint: props.aiCustom.hint } : {},
|
|
622
623
|
supports: () => true,
|
|
623
624
|
run: async () => {
|
|
@@ -628,7 +629,7 @@ function MatrxCopyMenuSession(props) {
|
|
|
628
629
|
if (aiVisible && props.groomer)
|
|
629
630
|
actions.push({
|
|
630
631
|
id: "groom-source",
|
|
631
|
-
label: "Customize sections
|
|
632
|
+
label: "Customize sections",
|
|
632
633
|
supports: () => true,
|
|
633
634
|
run: async () => {
|
|
634
635
|
setConfiguration({ groomer: props.groomer() });
|
|
@@ -738,7 +739,8 @@ function MatrxCopyMenuSession(props) {
|
|
|
738
739
|
className: cn(
|
|
739
740
|
props.className,
|
|
740
741
|
props.size === "xs" && "matrx-alchemy-xs",
|
|
741
|
-
props.size === "sm" && "matrx-alchemy-sm"
|
|
742
|
+
props.size === "sm" && "matrx-alchemy-sm",
|
|
743
|
+
props.size === "toolbar" && "matrx-alchemy-toolbar-target"
|
|
742
744
|
),
|
|
743
745
|
...props.stopPropagation !== void 0 ? { stopPropagation: props.stopPropagation } : {}
|
|
744
746
|
}
|
|
@@ -843,127 +845,132 @@ function SourceConfiguration({
|
|
|
843
845
|
event.preventDefault();
|
|
844
846
|
if (!handingOff.current) restoreFocus();
|
|
845
847
|
},
|
|
846
|
-
className: "matrx-alchemy-workspace",
|
|
848
|
+
className: "matrx-alchemy-workspace matrx-alchemy-configuration",
|
|
847
849
|
children: [
|
|
848
850
|
/* @__PURE__ */ jsxs3(DialogHeader, { children: [
|
|
849
851
|
/* @__PURE__ */ jsx7(DialogTitle, { children: title }),
|
|
850
852
|
/* @__PURE__ */ jsx7(DialogDescription, { children: custom?.dialogDescription ?? "Choose the source detail, then prepare, edit, summarize, copy or export it in Alchemy." })
|
|
851
853
|
] }),
|
|
852
|
-
/* @__PURE__ */ jsxs3("div", { className: "matrx-alchemy-
|
|
853
|
-
|
|
854
|
-
option
|
|
855
|
-
|
|
856
|
-
|
|
857
|
-
"
|
|
858
|
-
{
|
|
859
|
-
type: "checkbox",
|
|
860
|
-
checked: Boolean(values[option.key]),
|
|
861
|
-
onChange: (event) => setValues({ ...values, [option.key]: event.target.checked })
|
|
862
|
-
}
|
|
863
|
-
) : option.kind === "preset" ? /* @__PURE__ */ jsx7(
|
|
864
|
-
"select",
|
|
865
|
-
{
|
|
866
|
-
value: Number(values[option.key]),
|
|
867
|
-
onChange: (event) => setValues({
|
|
868
|
-
...values,
|
|
869
|
-
[option.key]: Number(event.target.value)
|
|
870
|
-
}),
|
|
871
|
-
children: option.options.map((choice) => /* @__PURE__ */ jsx7("option", { value: choice.value, children: choice.label }, choice.value))
|
|
872
|
-
}
|
|
873
|
-
) : option.kind === "slider" ? /* @__PURE__ */ jsxs3(Fragment, { children: [
|
|
874
|
-
/* @__PURE__ */ jsx7(
|
|
854
|
+
/* @__PURE__ */ jsxs3("div", { className: "matrx-alchemy-workspace-body", children: [
|
|
855
|
+
/* @__PURE__ */ jsxs3("div", { className: "matrx-alchemy-main matrx-alchemy-toolbar", children: [
|
|
856
|
+
custom?.options.map((option) => /* @__PURE__ */ jsxs3("label", { children: [
|
|
857
|
+
option.label,
|
|
858
|
+
"hint" in option && option.hint ? /* @__PURE__ */ jsx7("small", { children: option.hint }) : null,
|
|
859
|
+
option.kind === "toggle" ? /* @__PURE__ */ jsx7(
|
|
875
860
|
"input",
|
|
876
861
|
{
|
|
877
|
-
type: "
|
|
878
|
-
|
|
879
|
-
|
|
880
|
-
step: 1,
|
|
881
|
-
value: option.stops.indexOf(Number(values[option.key])),
|
|
882
|
-
onChange: (event) => setValues({
|
|
883
|
-
...values,
|
|
884
|
-
[option.key]: option.stops[Number(event.target.value)]
|
|
885
|
-
})
|
|
862
|
+
type: "checkbox",
|
|
863
|
+
checked: Boolean(values[option.key]),
|
|
864
|
+
onChange: (event) => setValues({ ...values, [option.key]: event.target.checked })
|
|
886
865
|
}
|
|
887
|
-
)
|
|
888
|
-
|
|
889
|
-
] }) : /* @__PURE__ */ jsxs3(Fragment, { children: [
|
|
890
|
-
/* @__PURE__ */ jsx7(
|
|
891
|
-
"input",
|
|
866
|
+
) : option.kind === "preset" ? /* @__PURE__ */ jsx7(
|
|
867
|
+
"select",
|
|
892
868
|
{
|
|
893
|
-
type: "number",
|
|
894
|
-
min: option.min,
|
|
895
|
-
step: option.step,
|
|
896
869
|
value: Number(values[option.key]),
|
|
897
870
|
onChange: (event) => setValues({
|
|
898
871
|
...values,
|
|
899
872
|
[option.key]: Number(event.target.value)
|
|
900
|
-
})
|
|
873
|
+
}),
|
|
874
|
+
children: option.options.map((choice) => /* @__PURE__ */ jsx7("option", { value: choice.value, children: choice.label }, choice.value))
|
|
901
875
|
}
|
|
902
|
-
),
|
|
903
|
-
|
|
876
|
+
) : option.kind === "slider" ? /* @__PURE__ */ jsxs3(Fragment, { children: [
|
|
877
|
+
/* @__PURE__ */ jsx7(
|
|
878
|
+
"input",
|
|
879
|
+
{
|
|
880
|
+
type: "range",
|
|
881
|
+
min: 0,
|
|
882
|
+
max: Math.max(0, option.stops.length - 1),
|
|
883
|
+
step: 1,
|
|
884
|
+
value: option.stops.indexOf(Number(values[option.key])),
|
|
885
|
+
onChange: (event) => setValues({
|
|
886
|
+
...values,
|
|
887
|
+
[option.key]: option.stops[Number(event.target.value)]
|
|
888
|
+
})
|
|
889
|
+
}
|
|
890
|
+
),
|
|
891
|
+
/* @__PURE__ */ jsx7("span", { children: option.formatValue(Number(values[option.key])) })
|
|
892
|
+
] }) : /* @__PURE__ */ jsxs3(Fragment, { children: [
|
|
893
|
+
/* @__PURE__ */ jsx7(
|
|
894
|
+
"input",
|
|
895
|
+
{
|
|
896
|
+
type: "number",
|
|
897
|
+
min: option.min,
|
|
898
|
+
step: option.step,
|
|
899
|
+
value: Number(values[option.key]),
|
|
900
|
+
onChange: (event) => setValues({
|
|
901
|
+
...values,
|
|
902
|
+
[option.key]: Number(event.target.value)
|
|
903
|
+
})
|
|
904
|
+
}
|
|
905
|
+
),
|
|
906
|
+
option.presets?.map((preset) => /* @__PURE__ */ jsx7(
|
|
907
|
+
Button,
|
|
908
|
+
{
|
|
909
|
+
type: "button",
|
|
910
|
+
variant: "ghost",
|
|
911
|
+
className: "matrx-alchemy-workspace-secondary",
|
|
912
|
+
onClick: () => setValues({ ...values, [option.key]: preset.value }),
|
|
913
|
+
children: preset.label
|
|
914
|
+
},
|
|
915
|
+
preset.value
|
|
916
|
+
))
|
|
917
|
+
] })
|
|
918
|
+
] }, option.key)),
|
|
919
|
+
groomer ? /* @__PURE__ */ jsxs3(Fragment, { children: [
|
|
920
|
+
/* @__PURE__ */ jsx7("div", { children: ["full", "compact", "brief"].map((level) => /* @__PURE__ */ jsx7(
|
|
904
921
|
Button,
|
|
905
922
|
{
|
|
906
923
|
type: "button",
|
|
907
924
|
variant: "ghost",
|
|
908
|
-
|
|
909
|
-
|
|
925
|
+
className: "matrx-alchemy-workspace-secondary",
|
|
926
|
+
onClick: () => setSections(
|
|
927
|
+
Object.fromEntries(
|
|
928
|
+
groomer.sections.map((section) => [
|
|
929
|
+
section.id,
|
|
930
|
+
level === "brief" && section.cuttable ? "off" : level
|
|
931
|
+
])
|
|
932
|
+
)
|
|
933
|
+
),
|
|
934
|
+
children: level
|
|
910
935
|
},
|
|
911
|
-
|
|
912
|
-
))
|
|
913
|
-
|
|
914
|
-
|
|
915
|
-
|
|
916
|
-
|
|
917
|
-
|
|
918
|
-
|
|
919
|
-
|
|
920
|
-
|
|
921
|
-
|
|
922
|
-
|
|
923
|
-
|
|
924
|
-
section.
|
|
925
|
-
|
|
926
|
-
]
|
|
927
|
-
|
|
936
|
+
level
|
|
937
|
+
)) }),
|
|
938
|
+
groomer.sections.map((section) => /* @__PURE__ */ jsxs3("label", { children: [
|
|
939
|
+
section.title,
|
|
940
|
+
/* @__PURE__ */ jsxs3(
|
|
941
|
+
"select",
|
|
942
|
+
{
|
|
943
|
+
value: sections[section.id],
|
|
944
|
+
onChange: (event) => setSections({
|
|
945
|
+
...sections,
|
|
946
|
+
[section.id]: event.target.value
|
|
947
|
+
}),
|
|
948
|
+
children: [
|
|
949
|
+
["full", "compact", "brief"].map((level) => /* @__PURE__ */ jsx7("option", { value: level, children: section.levelLabels?.[level] ?? level }, level)),
|
|
950
|
+
section.cuttable ? /* @__PURE__ */ jsx7("option", { value: "off", children: "Exclude" }) : null
|
|
951
|
+
]
|
|
952
|
+
}
|
|
928
953
|
),
|
|
929
|
-
children:
|
|
930
|
-
},
|
|
931
|
-
|
|
932
|
-
|
|
933
|
-
|
|
934
|
-
|
|
935
|
-
|
|
936
|
-
|
|
937
|
-
|
|
938
|
-
|
|
939
|
-
|
|
940
|
-
|
|
941
|
-
[section.id]: event.target.value
|
|
942
|
-
}),
|
|
943
|
-
children: [
|
|
944
|
-
["full", "compact", "brief"].map((level) => /* @__PURE__ */ jsx7("option", { value: level, children: section.levelLabels?.[level] ?? level }, level)),
|
|
945
|
-
section.cuttable ? /* @__PURE__ */ jsx7("option", { value: "off", children: "Exclude" }) : null
|
|
946
|
-
]
|
|
947
|
-
}
|
|
948
|
-
),
|
|
949
|
-
section.description ? /* @__PURE__ */ jsx7("span", { children: section.description }) : null
|
|
950
|
-
] }, section.id))
|
|
951
|
-
] }) : null
|
|
954
|
+
section.description ? /* @__PURE__ */ jsx7("span", { children: section.description }) : null
|
|
955
|
+
] }, section.id))
|
|
956
|
+
] }) : null
|
|
957
|
+
] }),
|
|
958
|
+
/* @__PURE__ */ jsxs3("p", { children: [
|
|
959
|
+
text.length.toLocaleString(),
|
|
960
|
+
" characters \xB7 approximately",
|
|
961
|
+
" ",
|
|
962
|
+
Math.ceil(text.length / 4).toLocaleString(),
|
|
963
|
+
" tokens"
|
|
964
|
+
] }),
|
|
965
|
+
error || buildError ? /* @__PURE__ */ jsx7("p", { role: "alert", children: error ?? buildError }) : null
|
|
952
966
|
] }),
|
|
953
|
-
/* @__PURE__ */ jsxs3("p", { children: [
|
|
954
|
-
text.length.toLocaleString(),
|
|
955
|
-
" characters \xB7 approximately",
|
|
956
|
-
" ",
|
|
957
|
-
Math.ceil(text.length / 4).toLocaleString(),
|
|
958
|
-
" tokens"
|
|
959
|
-
] }),
|
|
960
|
-
error || buildError ? /* @__PURE__ */ jsx7("p", { role: "alert", children: error ?? buildError }) : null,
|
|
961
967
|
/* @__PURE__ */ jsxs3(DialogFooter, { children: [
|
|
962
968
|
/* @__PURE__ */ jsx7(
|
|
963
969
|
Button,
|
|
964
970
|
{
|
|
965
971
|
type: "button",
|
|
966
972
|
variant: "ghost",
|
|
973
|
+
className: "matrx-alchemy-workspace-secondary",
|
|
967
974
|
disabled: busy,
|
|
968
975
|
onClick: onClose,
|
|
969
976
|
children: "Cancel"
|
|
@@ -973,6 +980,7 @@ function SourceConfiguration({
|
|
|
973
980
|
Button,
|
|
974
981
|
{
|
|
975
982
|
type: "button",
|
|
983
|
+
className: "matrx-alchemy-workspace-primary",
|
|
976
984
|
disabled: busy || !prepared || Boolean(buildError),
|
|
977
985
|
onClick: async () => {
|
|
978
986
|
if (!prepared) return;
|
|
@@ -1061,11 +1069,7 @@ function groomerPresetVariants(getConfig) {
|
|
|
1061
1069
|
// src/content-transfer/index.tsx
|
|
1062
1070
|
import { Fragment as Fragment2, jsx as jsx8, jsxs as jsxs4 } from "react/jsx-runtime";
|
|
1063
1071
|
function AlchemyGlyph(props) {
|
|
1064
|
-
return /* @__PURE__ */
|
|
1065
|
-
/* @__PURE__ */ jsx8("path", { d: "M4.5 5.5h8v11h-8z" }),
|
|
1066
|
-
/* @__PURE__ */ jsx8("path", { d: "M8.5 9.5h8v9h-8z" }),
|
|
1067
|
-
/* @__PURE__ */ jsx8("path", { d: "m18.5 3 .65 1.85L21 5.5l-1.85.65L18.5 8l-.65-1.85L16 5.5l1.85-.65z" })
|
|
1068
|
-
] });
|
|
1072
|
+
return /* @__PURE__ */ jsx8("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "1.8", strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": "true", ...props, children: ALCHEMY_GLYPH_PATHS.map((d) => /* @__PURE__ */ jsx8("path", { d }, d)) });
|
|
1069
1073
|
}
|
|
1070
1074
|
var CapabilityContext = React8.createContext({});
|
|
1071
1075
|
function ContentTransferCapabilitiesProvider({ value, children }) {
|
|
@@ -1086,7 +1090,16 @@ function MenuPresentation({ label, hint, icon: Icon }) {
|
|
|
1086
1090
|
] })
|
|
1087
1091
|
] });
|
|
1088
1092
|
}
|
|
1089
|
-
function PaletteGlyph({ format, ai = false, file = false }) {
|
|
1093
|
+
function PaletteGlyph({ format, ai = false, file = false, kind }) {
|
|
1094
|
+
if (kind === "ai-copy") return /* @__PURE__ */ jsxs4("svg", { className: "matrx-alchemy-palette-glyph", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "1.8", strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": "true", children: [
|
|
1095
|
+
/* @__PURE__ */ jsx8("rect", { x: "5", y: "5", width: "11", height: "14", rx: "2" }),
|
|
1096
|
+
/* @__PURE__ */ jsx8("path", { d: "M9 3h6a2 2 0 0 1 2 2v10" }),
|
|
1097
|
+
/* @__PURE__ */ jsx8("path", { d: "m18.5 3 .55 1.45L20.5 5l-1.45.55L18.5 7l-.55-1.45L16.5 5l1.45-.55z" })
|
|
1098
|
+
] });
|
|
1099
|
+
if (kind === "sliders") return /* @__PURE__ */ jsxs4("svg", { className: "matrx-alchemy-palette-glyph", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "1.8", strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": "true", children: [
|
|
1100
|
+
/* @__PURE__ */ jsx8("path", { d: "M4 6h16M4 12h16M4 18h16" }),
|
|
1101
|
+
/* @__PURE__ */ jsx8("path", { d: "M8 3v6M16 9v6M10 15v6" })
|
|
1102
|
+
] });
|
|
1090
1103
|
if (ai) return /* @__PURE__ */ jsxs4("svg", { className: "matrx-alchemy-palette-glyph", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "1.8", strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": "true", children: [
|
|
1091
1104
|
/* @__PURE__ */ jsx8("path", { d: "M12 5a3 3 0 1 0-5.997.125A4 4 0 0 0 3.5 10.9a4 4 0 0 0 .556 6.588A4 4 0 0 0 12 19" }),
|
|
1092
1105
|
/* @__PURE__ */ jsx8("path", { d: "M12 5a3 3 0 1 1 5.997.125 4 4 0 0 1 2.503 5.775 4 4 0 0 1-.556 6.588A4 4 0 0 1 12 19" }),
|
|
@@ -1119,15 +1132,15 @@ function PaletteGlyph({ format, ai = false, file = false }) {
|
|
|
1119
1132
|
] }) : format === "html" ? /* @__PURE__ */ jsx8(Fragment2, { children: /* @__PURE__ */ jsx8("path", { d: "M15 6h6M3 6h7M3 12h18M3 18h12" }) }) : /* @__PURE__ */ jsx8(Fragment2, { children: /* @__PURE__ */ jsx8("path", { d: "M4 7V4h16v3M9 20h6M12 4v16" }) });
|
|
1120
1133
|
return /* @__PURE__ */ jsx8("svg", { className: "matrx-alchemy-palette-glyph", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "1.8", strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": "true", children: path });
|
|
1121
1134
|
}
|
|
1122
|
-
function PaletteRows({ title, items, onRun, extra, ai = false }) {
|
|
1135
|
+
function PaletteRows({ title, items, onRun, extra, ai = false, glyphKind, fallbackHint }) {
|
|
1123
1136
|
if (!items.length && !extra) return null;
|
|
1124
1137
|
return /* @__PURE__ */ jsxs4("section", { className: "matrx-alchemy-palette-section", children: [
|
|
1125
1138
|
/* @__PURE__ */ jsx8("h3", { children: title }),
|
|
1126
1139
|
items.map((item) => /* @__PURE__ */ jsxs4("button", { type: "button", className: cn("matrx-alchemy-palette-row", ai && "matrx-alchemy-palette-row-ai"), "aria-label": item.ariaLabel, onClick: () => onRun?.(item), children: [
|
|
1127
|
-
item.icon ? /* @__PURE__ */ jsx8(item.icon, { className: "matrx-alchemy-menu-icon" }) : /* @__PURE__ */ jsx8(PaletteGlyph, { ai }),
|
|
1140
|
+
item.icon ? /* @__PURE__ */ jsx8(item.icon, { className: "matrx-alchemy-menu-icon" }) : /* @__PURE__ */ jsx8(PaletteGlyph, { ai, ...glyphKind ? { kind: glyphKind } : {} }),
|
|
1128
1141
|
/* @__PURE__ */ jsxs4("span", { children: [
|
|
1129
1142
|
item.copyLabel ?? item.label,
|
|
1130
|
-
item.hint ? /* @__PURE__ */ jsx8("small", { className: "matrx-alchemy-menu-hint", children: item.hint }) : null
|
|
1143
|
+
item.hint ?? fallbackHint ? /* @__PURE__ */ jsx8("small", { className: "matrx-alchemy-menu-hint", children: item.hint ?? fallbackHint }) : null
|
|
1131
1144
|
] })
|
|
1132
1145
|
] }, item.id)),
|
|
1133
1146
|
extra
|
|
@@ -1524,45 +1537,54 @@ function ContentTransferMenuSession({ source, surface, label, projection, sectio
|
|
|
1524
1537
|
}, children: [
|
|
1525
1538
|
/* @__PURE__ */ jsx8(PopoverTrigger, { asChild: true, children: /* @__PURE__ */ jsx8("button", { ref: triggerRef, type: "button", className: "matrx-alchemy-trigger", disabled, "aria-label": `Copy, transform or export ${sourceLabel}`, title: "Alchemy \u2014 copy, transform, export", children: /* @__PURE__ */ jsx8(AlchemyGlyph, {}) }) }),
|
|
1526
1539
|
/* @__PURE__ */ jsxs4(PopoverContent, { align: "end", className: "matrx-alchemy-menu matrx-alchemy-palette", "aria-label": "Alchemy output options", onCloseAutoFocus: () => triggerRef.current?.focus(), children: [
|
|
1527
|
-
copyAvailable && downloadAvailable ? /* @__PURE__ */ jsxs4("div", { className: "matrx-alchemy-mode", "aria-label": "Output action", children: [
|
|
1528
|
-
/* @__PURE__ */ jsx8("button", { type: "button", "aria-label": "Copy mode", "aria-pressed": resolvedMode === "copy", onClick: () => setMode("copy"), children: "Copy" }),
|
|
1529
|
-
/* @__PURE__ */ jsx8("button", { type: "button", "aria-label": "Download mode", "aria-pressed": resolvedMode === "download", onClick: () => setMode("download"), children: "Download" })
|
|
1530
|
-
] }) : null,
|
|
1531
1540
|
menuStatus === "loading" ? /* @__PURE__ */ jsx8("p", { className: "matrx-alchemy-palette-status", children: "Inspecting content\u2026" }) : menuStatus !== "idle" ? /* @__PURE__ */ jsx8("p", { className: "matrx-alchemy-error", children: menuStatus }) : null,
|
|
1532
|
-
|
|
1533
|
-
/* @__PURE__ */
|
|
1534
|
-
|
|
1535
|
-
|
|
1536
|
-
|
|
1537
|
-
|
|
1541
|
+
copyAvailable || downloadAvailable ? /* @__PURE__ */ jsxs4("section", { className: "matrx-alchemy-output", children: [
|
|
1542
|
+
/* @__PURE__ */ jsx8("h3", { children: resolvedMode === "copy" ? "Copy as" : "Download as" }),
|
|
1543
|
+
copyAvailable && downloadAvailable ? /* @__PURE__ */ jsxs4("div", { className: "matrx-alchemy-mode", "aria-label": "Output action", children: [
|
|
1544
|
+
/* @__PURE__ */ jsx8("button", { type: "button", "aria-label": "Copy mode", "aria-pressed": resolvedMode === "copy", onClick: () => setMode("copy"), children: "Copy" }),
|
|
1545
|
+
/* @__PURE__ */ jsx8("button", { type: "button", "aria-label": "Download mode", "aria-pressed": resolvedMode === "download", onClick: () => setMode("download"), children: "Download" })
|
|
1546
|
+
] }) : null,
|
|
1547
|
+
resolvedMode === "copy" && copyAvailable ? /* @__PURE__ */ jsxs4(Fragment2, { children: [
|
|
1548
|
+
/* @__PURE__ */ jsxs4("div", { className: "matrx-alchemy-palette-grid", children: [
|
|
1549
|
+
visibleCopies.map((format) => tile(format, { plain: "Text", markdown: "Markdown", html: "Formatted", json: "JSON", "compact-json": "Compact", csv: "CSV", tsv: "Sheets" }[format], () => void transfer(format, false), { ariaLabel: `Copy ${LABEL[format]}` })),
|
|
1550
|
+
visibleAdapters.map((adapter) => tile(adapter.id, adapter.label, () => void transfer(adapter, false), { custom: true }))
|
|
1551
|
+
] }),
|
|
1552
|
+
quickVariants("copy").length ? /* @__PURE__ */ jsx8(PaletteRows, { title: "Quick copy", items: quickVariants("copy"), onRun: (variant) => {
|
|
1553
|
+
closePalette();
|
|
1554
|
+
void transfer("markdown", false, variant);
|
|
1555
|
+
} }) : null
|
|
1556
|
+
] }) : null,
|
|
1557
|
+
resolvedMode === "download" && downloadAvailable ? /* @__PURE__ */ jsx8(Fragment2, { children: /* @__PURE__ */ jsxs4("div", { className: "matrx-alchemy-palette-grid", children: [
|
|
1558
|
+
visibleDownloads.map((format) => tile(format, { plain: "Text", markdown: "Markdown", html: "Formatted", json: "JSON", "compact-json": "Compact", csv: "CSV", tsv: "Sheets", xlsx: "Excel" }[format], () => void transfer(format, true), { ariaLabel: `Download ${LABEL[format]}` })),
|
|
1559
|
+
visibleAdapters.map((adapter) => tile(adapter.id, adapter.label, () => void transfer(adapter, true), { custom: true })),
|
|
1560
|
+
downloadActions.map((action) => tile(action.id, action.label, () => void runAction(action), { custom: true, action, file: true }))
|
|
1561
|
+
] }) }) : null
|
|
1562
|
+
] }) : null,
|
|
1563
|
+
prepareAvailable ? /* @__PURE__ */ jsxs4(Fragment2, { children: [
|
|
1564
|
+
/* @__PURE__ */ jsx8(PaletteRows, { title: "Copy for AI", ai: true, glyphKind: "ai-copy", fallbackHint: "Copies immediately", items: quickVariants("ai"), onRun: (variant) => {
|
|
1538
1565
|
closePalette();
|
|
1539
1566
|
void transfer("markdown", false, variant);
|
|
1540
|
-
} })
|
|
1567
|
+
} }),
|
|
1568
|
+
/* @__PURE__ */ jsx8(PaletteRows, { title: "Edit and prepare", items: [], extra: /* @__PURE__ */ jsxs4("button", { type: "button", className: "matrx-alchemy-palette-row", "aria-label": "Prepare for AI", onClick: () => {
|
|
1569
|
+
closePalette();
|
|
1570
|
+
void openWorkspace();
|
|
1571
|
+
}, children: [
|
|
1572
|
+
/* @__PURE__ */ jsx8(PaletteGlyph, { kind: "sliders" }),
|
|
1573
|
+
/* @__PURE__ */ jsxs4("span", { children: [
|
|
1574
|
+
"Prepare for AI",
|
|
1575
|
+
/* @__PURE__ */ jsx8("small", { className: "matrx-alchemy-menu-hint", children: "Review and edit before copying" })
|
|
1576
|
+
] })
|
|
1577
|
+
] }) })
|
|
1541
1578
|
] }) : null,
|
|
1542
|
-
|
|
1543
|
-
visibleDownloads.map((format) => tile(format, { plain: "Text", markdown: "Markdown", html: "Formatted", json: "JSON", "compact-json": "Compact", csv: "CSV", tsv: "Sheets", xlsx: "Excel" }[format], () => void transfer(format, true), { ariaLabel: `Download ${LABEL[format]}` })),
|
|
1544
|
-
visibleAdapters.map((adapter) => tile(adapter.id, adapter.label, () => void transfer(adapter, true), { custom: true })),
|
|
1545
|
-
downloadActions.map((action) => tile(action.id, action.label, () => void runAction(action), { custom: true, action, file: true }))
|
|
1546
|
-
] }) }) : null,
|
|
1547
|
-
prepareAvailable ? /* @__PURE__ */ jsx8(PaletteRows, { title: "Prepare", ai: true, items: quickVariants("ai"), onRun: (variant) => {
|
|
1548
|
-
closePalette();
|
|
1549
|
-
void transfer("markdown", false, variant);
|
|
1550
|
-
}, extra: /* @__PURE__ */ jsxs4("button", { type: "button", className: "matrx-alchemy-palette-row", onClick: () => {
|
|
1551
|
-
closePalette();
|
|
1552
|
-
void openWorkspace();
|
|
1553
|
-
}, children: [
|
|
1554
|
-
/* @__PURE__ */ jsx8(PaletteGlyph, { ai: true }),
|
|
1555
|
-
/* @__PURE__ */ jsx8("span", { children: "Prepare for AI\u2026" })
|
|
1556
|
-
] }) }) : null,
|
|
1557
|
-
prepareAvailable && (nearestWorkspaceKey || variants.length) ? /* @__PURE__ */ jsx8(PaletteRows, { title: "Context", items: [], extra: /* @__PURE__ */ jsxs4(Fragment2, { children: [
|
|
1579
|
+
prepareAvailable && (nearestWorkspaceKey || variants.length) ? /* @__PURE__ */ jsx8(PaletteRows, { title: "Other sources", items: [], extra: /* @__PURE__ */ jsxs4(Fragment2, { children: [
|
|
1558
1580
|
nearestWorkspaceKey && nearestSurface ? /* @__PURE__ */ jsx8("button", { type: "button", className: "matrx-alchemy-palette-row", onClick: () => {
|
|
1559
1581
|
closePalette();
|
|
1560
1582
|
void openWorkspace(nearestWorkspaceKey, { source: nearestSurface, label: nearestSurface.surfaceName });
|
|
1561
|
-
}, children: /* @__PURE__ */ jsx8("span", { children: "Prepare this surface
|
|
1583
|
+
}, children: /* @__PURE__ */ jsx8("span", { children: "Prepare this surface" }) }) : null,
|
|
1562
1584
|
variants.map((variant) => /* @__PURE__ */ jsx8("button", { type: "button", className: "matrx-alchemy-palette-row", "aria-label": variant.ariaLabel, onClick: () => {
|
|
1563
1585
|
closePalette();
|
|
1564
1586
|
void openWorkspace(variantWorkspaceKeys.get(variant.id), variant);
|
|
1565
|
-
}, children: /* @__PURE__ */ jsx8(MenuPresentation, { ...variant, label: `Prepare ${variant.label}
|
|
1587
|
+
}, children: /* @__PURE__ */ jsx8(MenuPresentation, { ...variant, label: `Prepare ${variant.label}` }) }, variant.id))
|
|
1566
1588
|
] }) }) : null,
|
|
1567
1589
|
ordinaryActions.length ? /* @__PURE__ */ jsx8(PaletteRows, { title: "Actions", items: [], extra: ordinaryActions.map((action) => /* @__PURE__ */ jsx8("button", { type: "button", className: "matrx-alchemy-palette-row", "aria-label": action.ariaLabel, onClick: () => {
|
|
1568
1590
|
closePalette();
|
|
@@ -1840,137 +1862,150 @@ function PreparationWorkspace({ restoreFocus, open, state, scopes, onClose, onCh
|
|
|
1840
1862
|
state.snapshot.label
|
|
1841
1863
|
] }),
|
|
1842
1864
|
/* @__PURE__ */ jsxs4(DialogDescription, { children: [
|
|
1843
|
-
"
|
|
1844
|
-
|
|
1845
|
-
". Your source is never edited."
|
|
1865
|
+
state.snapshot.unsavedChanges ? "Includes your unsaved changes. " : "",
|
|
1866
|
+
"Review and edit this copy. Your original stays unchanged."
|
|
1846
1867
|
] })
|
|
1847
1868
|
] }),
|
|
1848
|
-
/* @__PURE__ */ jsxs4("div", { className: "matrx-alchemy-workspace-
|
|
1849
|
-
/* @__PURE__ */ jsxs4("
|
|
1850
|
-
/* @__PURE__ */ jsxs4("
|
|
1851
|
-
|
|
1852
|
-
"
|
|
1853
|
-
|
|
1854
|
-
|
|
1855
|
-
|
|
1856
|
-
"
|
|
1857
|
-
|
|
1858
|
-
/* @__PURE__ */
|
|
1859
|
-
|
|
1860
|
-
|
|
1861
|
-
|
|
1862
|
-
|
|
1863
|
-
|
|
1864
|
-
|
|
1865
|
-
|
|
1866
|
-
|
|
1867
|
-
|
|
1869
|
+
/* @__PURE__ */ jsxs4("div", { className: "matrx-alchemy-workspace-body", children: [
|
|
1870
|
+
/* @__PURE__ */ jsxs4("div", { className: "matrx-alchemy-workspace-grid", children: [
|
|
1871
|
+
/* @__PURE__ */ jsxs4("section", { className: "matrx-alchemy-main", children: [
|
|
1872
|
+
/* @__PURE__ */ jsxs4("div", { className: "matrx-alchemy-toolbar", children: [
|
|
1873
|
+
scopes.length > 1 ? /* @__PURE__ */ jsxs4("label", { children: [
|
|
1874
|
+
"Scope",
|
|
1875
|
+
/* @__PURE__ */ jsx8("select", { "aria-label": "Transfer scope", value: state.scope, disabled: busy !== null, onChange: (e) => void requestCapture(e.target.value), children: scopes.map((scope) => /* @__PURE__ */ jsx8("option", { value: scope, children: SCOPE_LABEL[scope] }, scope)) })
|
|
1876
|
+
] }) : null,
|
|
1877
|
+
/* @__PURE__ */ jsxs4("label", { children: [
|
|
1878
|
+
"Detail",
|
|
1879
|
+
/* @__PURE__ */ jsxs4("select", { "aria-label": "Detail preset", value: controls.preset, onChange: (e) => changeControls({ ...controls, preset: e.target.value }), children: [
|
|
1880
|
+
/* @__PURE__ */ jsx8("option", { value: "full", children: "Full" }),
|
|
1881
|
+
/* @__PURE__ */ jsx8("option", { value: "compact", children: "Compact" }),
|
|
1882
|
+
/* @__PURE__ */ jsx8("option", { value: "brief", children: "Brief" }),
|
|
1883
|
+
/* @__PURE__ */ jsx8("option", { value: "custom", children: "Custom" })
|
|
1884
|
+
] })
|
|
1885
|
+
] }),
|
|
1886
|
+
/* @__PURE__ */ jsx8(Button, { type: "button", size: "sm", variant: "outline", className: "matrx-alchemy-workspace-secondary", disabled: !state.draft.history?.length && !controlsHistory.length || busy !== null, onClick: () => {
|
|
1887
|
+
setBufferError(null);
|
|
1888
|
+
if (controlsHistory.length) {
|
|
1889
|
+
const next = controlsHistory[controlsHistory.length - 1];
|
|
1890
|
+
setControls(next);
|
|
1891
|
+
setControlsHistory((history) => history.slice(0, -1));
|
|
1892
|
+
onChange({ ...state, draft: rebuild(state, next), error: void 0 });
|
|
1893
|
+
} else onChange({ ...state, draft: undoDraft(state.draft), error: void 0 });
|
|
1894
|
+
}, children: "Undo" }),
|
|
1895
|
+
/* @__PURE__ */ jsx8(Button, { type: "button", size: "sm", variant: "outline", className: "matrx-alchemy-workspace-secondary", disabled: busy !== null, onClick: () => {
|
|
1896
|
+
const next = initialControls(state);
|
|
1868
1897
|
setControls(next);
|
|
1869
|
-
setControlsHistory(
|
|
1898
|
+
setControlsHistory([]);
|
|
1899
|
+
setPendingControls(null);
|
|
1900
|
+
setBufferError(null);
|
|
1870
1901
|
onChange({ ...state, draft: rebuild(state, next), error: void 0 });
|
|
1871
|
-
}
|
|
1872
|
-
|
|
1873
|
-
/* @__PURE__ */ jsx8(Button, { type: "button", size: "sm", variant: "outline", disabled: busy !== null, onClick: () => {
|
|
1874
|
-
const next = initialControls(state);
|
|
1875
|
-
setControls(next);
|
|
1876
|
-
setControlsHistory([]);
|
|
1877
|
-
setPendingControls(null);
|
|
1878
|
-
setBufferError(null);
|
|
1879
|
-
onChange({ ...state, draft: rebuild(state, next), error: void 0 });
|
|
1880
|
-
}, children: "Reset" }),
|
|
1881
|
-
/* @__PURE__ */ jsx8(Button, { type: "button", size: "sm", variant: "outline", disabled: busy !== null, onClick: () => void requestCapture(state.scope), children: "Refresh source" })
|
|
1882
|
-
] }),
|
|
1883
|
-
controls.preset === "custom" && (state.draft.payload.kind === "json" || state.draft.payload.kind === "registered") ? /* @__PURE__ */ jsxs4("fieldset", { className: "matrx-alchemy-options", children: [
|
|
1884
|
-
/* @__PURE__ */ jsx8("legend", { children: "JSON limits" }),
|
|
1885
|
-
[["maxDepth", "Maximum depth"], ["maxStringChars", "Maximum string characters"], ["maxArrayItems", "Maximum array items"]].map(([key, text]) => /* @__PURE__ */ jsxs4("label", { children: [
|
|
1886
|
-
text,
|
|
1887
|
-
/* @__PURE__ */ jsx8("input", { type: "number", min: "0", value: controls[key] ?? "", onChange: (e) => changeControls({ ...controls, [key]: Number.isNaN(e.target.valueAsNumber) ? null : e.target.valueAsNumber }) })
|
|
1888
|
-
] }, key))
|
|
1889
|
-
] }) : null,
|
|
1890
|
-
rows ? /* @__PURE__ */ jsx8(RowControls, { rows, controls, change: changeControls }) : null,
|
|
1891
|
-
state.snapshot.sections.length ? /* @__PURE__ */ jsxs4("fieldset", { className: "matrx-alchemy-options", children: [
|
|
1892
|
-
/* @__PURE__ */ jsx8("legend", { children: "Sections" }),
|
|
1893
|
-
state.snapshot.sections.map((section) => /* @__PURE__ */ jsxs4("label", { children: [
|
|
1894
|
-
/* @__PURE__ */ jsx8("input", { type: "checkbox", checked: controls.sections.includes(section.id), onChange: (e) => changeControls({ ...controls, sections: e.target.checked ? [...controls.sections, section.id] : controls.sections.filter((id) => id !== section.id) }) }),
|
|
1895
|
-
" ",
|
|
1896
|
-
section.label
|
|
1897
|
-
] }, section.id))
|
|
1898
|
-
] }) : null,
|
|
1899
|
-
/* @__PURE__ */ jsxs4("div", { className: "matrx-alchemy-coverage", children: [
|
|
1900
|
-
/* @__PURE__ */ jsxs4("span", { children: [
|
|
1901
|
-
state.snapshot.coverage.included.toLocaleString(),
|
|
1902
|
-
" included",
|
|
1903
|
-
state.snapshot.coverage.total == null ? "" : ` of ${state.snapshot.coverage.total.toLocaleString()}`,
|
|
1904
|
-
" \xB7 ",
|
|
1905
|
-
state.snapshot.coverage.status
|
|
1902
|
+
}, children: "Reset" }),
|
|
1903
|
+
/* @__PURE__ */ jsx8(Button, { type: "button", size: "sm", variant: "outline", className: "matrx-alchemy-workspace-secondary", disabled: busy !== null, onClick: () => void requestCapture(state.scope), children: "Refresh source" })
|
|
1906
1904
|
] }),
|
|
1907
|
-
state.
|
|
1908
|
-
|
|
1909
|
-
"
|
|
1910
|
-
|
|
1905
|
+
controls.preset === "custom" && (state.draft.payload.kind === "json" || state.draft.payload.kind === "registered") ? /* @__PURE__ */ jsxs4("fieldset", { className: "matrx-alchemy-options", children: [
|
|
1906
|
+
/* @__PURE__ */ jsx8("legend", { children: "JSON limits" }),
|
|
1907
|
+
[["maxDepth", "Maximum depth"], ["maxStringChars", "Maximum string characters"], ["maxArrayItems", "Maximum array items"]].map(([key, text]) => /* @__PURE__ */ jsxs4("label", { children: [
|
|
1908
|
+
text,
|
|
1909
|
+
/* @__PURE__ */ jsx8("input", { type: "number", min: "0", value: controls[key] ?? "", onChange: (e) => changeControls({ ...controls, [key]: Number.isNaN(e.target.valueAsNumber) ? null : e.target.valueAsNumber }) })
|
|
1910
|
+
] }, key))
|
|
1911
1911
|
] }) : null,
|
|
1912
|
-
|
|
1912
|
+
rows ? /* @__PURE__ */ jsxs4("details", { className: "matrx-alchemy-options matrx-alchemy-data-controls", children: [
|
|
1913
1913
|
/* @__PURE__ */ jsxs4("summary", { children: [
|
|
1914
|
-
|
|
1915
|
-
|
|
1914
|
+
"Data selection \xB7 ",
|
|
1915
|
+
controls.visibleColumns.length,
|
|
1916
|
+
" columns",
|
|
1917
|
+
controls.search || controls.sort || controls.top != null || controls.selectedOnly || Object.values(controls.filters).some(Boolean) ? " \xB7 customized" : " \xB7 all rows"
|
|
1916
1918
|
] }),
|
|
1917
|
-
/* @__PURE__ */ jsx8("
|
|
1918
|
-
|
|
1919
|
-
|
|
1920
|
-
|
|
1921
|
-
|
|
1922
|
-
|
|
1923
|
-
|
|
1924
|
-
|
|
1925
|
-
|
|
1926
|
-
|
|
1927
|
-
|
|
1928
|
-
|
|
1929
|
-
|
|
1930
|
-
|
|
1931
|
-
|
|
1919
|
+
/* @__PURE__ */ jsx8("div", { className: "matrx-alchemy-data-controls-body", children: /* @__PURE__ */ jsx8(RowControls, { rows, controls, change: changeControls }) })
|
|
1920
|
+
] }) : null,
|
|
1921
|
+
state.snapshot.sections.length ? /* @__PURE__ */ jsxs4("details", { className: "matrx-alchemy-options", children: [
|
|
1922
|
+
/* @__PURE__ */ jsxs4("summary", { children: [
|
|
1923
|
+
"Sections \xB7 ",
|
|
1924
|
+
controls.sections.length,
|
|
1925
|
+
" included"
|
|
1926
|
+
] }),
|
|
1927
|
+
/* @__PURE__ */ jsx8("fieldset", { "aria-label": "Included sections", children: state.snapshot.sections.map((section) => /* @__PURE__ */ jsxs4("label", { children: [
|
|
1928
|
+
/* @__PURE__ */ jsx8("input", { type: "checkbox", checked: controls.sections.includes(section.id), onChange: (e) => changeControls({ ...controls, sections: e.target.checked ? [...controls.sections, section.id] : controls.sections.filter((id) => id !== section.id) }) }),
|
|
1929
|
+
" ",
|
|
1930
|
+
section.label
|
|
1931
|
+
] }, section.id)) })
|
|
1932
|
+
] }) : null,
|
|
1933
|
+
/* @__PURE__ */ jsxs4("label", { className: "matrx-alchemy-preview-label", children: [
|
|
1934
|
+
"Output format",
|
|
1935
|
+
/* @__PURE__ */ jsxs4("select", { "aria-label": "Output format", value: format, onChange: (e) => setFormat(e.target.value), children: [
|
|
1936
|
+
formats.map((f) => /* @__PURE__ */ jsx8("option", { value: f, children: LABEL[f] }, f)),
|
|
1937
|
+
state.draft.payload.kind === "rows" ? /* @__PURE__ */ jsx8("option", { value: "xlsx", children: "Excel workbook" }) : null,
|
|
1938
|
+
workspaceAdapters.map((adapter) => /* @__PURE__ */ jsx8("option", { value: adapter.id, children: adapter.label }, adapter.id))
|
|
1939
|
+
] })
|
|
1940
|
+
] }),
|
|
1941
|
+
/* @__PURE__ */ jsx8("textarea", { className: "matrx-alchemy-preview", "aria-label": "Prepared output", "aria-invalid": bufferError ? true : void 0, "aria-describedby": bufferError ? "alchemy-buffer-error" : void 0, value: buffer, onChange: (e) => editBuffer(e.target.value) }),
|
|
1942
|
+
/* @__PURE__ */ jsxs4("div", { className: "matrx-alchemy-coverage", children: [
|
|
1943
|
+
/* @__PURE__ */ jsxs4("span", { children: [
|
|
1944
|
+
state.snapshot.coverage.included.toLocaleString(),
|
|
1945
|
+
" included",
|
|
1946
|
+
state.snapshot.coverage.total == null ? "" : ` of ${state.snapshot.coverage.total.toLocaleString()}`,
|
|
1947
|
+
" \xB7 ",
|
|
1948
|
+
state.snapshot.coverage.status
|
|
1949
|
+
] }),
|
|
1950
|
+
state.snapshot.coverage.reason ? /* @__PURE__ */ jsx8("span", { children: state.snapshot.coverage.reason }) : null,
|
|
1951
|
+
limitText ? /* @__PURE__ */ jsxs4("span", { children: [
|
|
1952
|
+
"Limits: ",
|
|
1953
|
+
limitText
|
|
1954
|
+
] }) : null,
|
|
1955
|
+
displayedOmissions.length ? /* @__PURE__ */ jsxs4("details", { children: [
|
|
1956
|
+
/* @__PURE__ */ jsxs4("summary", { children: [
|
|
1957
|
+
displayedOmissions.length,
|
|
1958
|
+
" omissions or adjustments"
|
|
1959
|
+
] }),
|
|
1960
|
+
/* @__PURE__ */ jsx8("ul", { children: displayedOmissions.map((o, i) => /* @__PURE__ */ jsxs4("li", { children: [
|
|
1961
|
+
o.path || "/",
|
|
1962
|
+
": ",
|
|
1963
|
+
o.reason,
|
|
1964
|
+
o.count == null ? "" : ` (${o.count})`
|
|
1965
|
+
] }, `${o.path}-${o.reason}-${i}`)) })
|
|
1966
|
+
] }) : null
|
|
1967
|
+
] }),
|
|
1968
|
+
bufferError ? /* @__PURE__ */ jsx8("p", { id: "alchemy-buffer-error", role: "alert", className: "matrx-alchemy-error", children: bufferError }) : null,
|
|
1969
|
+
formatError ? /* @__PURE__ */ jsx8("p", { role: "alert", className: "matrx-alchemy-error", children: formatError }) : null,
|
|
1970
|
+
bufferError ? /* @__PURE__ */ jsx8(Button, { className: "matrx-alchemy-workspace-secondary", type: "button", variant: "outline", disabled: busy !== null, onClick: () => {
|
|
1971
|
+
const fallback = editDraft(state.draft, { kind: "text", text: buffer });
|
|
1972
|
+
setBufferError(null);
|
|
1973
|
+
onChange({ ...state, draft: fallback, error: void 0 });
|
|
1974
|
+
setFormat("plain");
|
|
1975
|
+
}, children: "Use invalid JSON as plain text" }) : null
|
|
1932
1976
|
] }),
|
|
1933
|
-
|
|
1934
|
-
|
|
1935
|
-
|
|
1936
|
-
|
|
1937
|
-
|
|
1938
|
-
|
|
1939
|
-
|
|
1940
|
-
|
|
1941
|
-
|
|
1977
|
+
ai || busy === "capture" || state.error ? /* @__PURE__ */ jsxs4("aside", { children: [
|
|
1978
|
+
ai ? /* @__PURE__ */ jsxs4(Fragment2, { children: [
|
|
1979
|
+
/* @__PURE__ */ jsxs4("label", { children: [
|
|
1980
|
+
"AI instruction",
|
|
1981
|
+
/* @__PURE__ */ jsx8("textarea", { value: instruction, onChange: (e) => setInstruction(e.target.value), placeholder: "Tell AI how to prepare this content" })
|
|
1982
|
+
] }),
|
|
1983
|
+
/* @__PURE__ */ jsx8(Button, { className: "matrx-alchemy-workspace-secondary", type: "button", variant: "outline", disabled: !aiSession.current || !instruction.trim() || busy !== null || !aiSession.current.supports(state.snapshot), onClick: () => void runAi(false), children: "Generate preview" }),
|
|
1984
|
+
busy === "ai" ? /* @__PURE__ */ jsx8(Button, { className: "matrx-alchemy-workspace-secondary", type: "button", variant: "outline", onClick: () => void cancelAi(), children: aiSession.current?.cancel ? "Cancel AI" : "Stop waiting" }) : null
|
|
1985
|
+
] }) : null,
|
|
1986
|
+
busy === "capture" ? /* @__PURE__ */ jsx8(Button, { className: "matrx-alchemy-workspace-secondary", type: "button", variant: "outline", onClick: () => {
|
|
1987
|
+
activeCapture.current?.abort();
|
|
1988
|
+
activeCapture.current = null;
|
|
1989
|
+
setBusy(null);
|
|
1990
|
+
}, children: "Stop loading rows" }) : null,
|
|
1991
|
+
ai && aiFailed && aiSession.current?.recover && busy !== "ai" ? /* @__PURE__ */ jsx8(Button, { className: "matrx-alchemy-workspace-secondary", type: "button", variant: "outline", onClick: () => void runAi(true), children: aiFailed ? "Retry or rejoin AI run" : "Rejoin AI run" }) : null,
|
|
1992
|
+
ai ? /* @__PURE__ */ jsx8("p", { className: "matrx-alchemy-meta", children: "AI updates the preview; copy it when you are ready. Closing this window lets the AI run continue." }) : null,
|
|
1993
|
+
state.error ? /* @__PURE__ */ jsx8("p", { role: "alert", className: "matrx-alchemy-error", children: state.error }) : null
|
|
1994
|
+
] }) : null
|
|
1942
1995
|
] }),
|
|
1943
|
-
|
|
1944
|
-
|
|
1945
|
-
|
|
1946
|
-
|
|
1947
|
-
|
|
1948
|
-
|
|
1949
|
-
|
|
1950
|
-
|
|
1951
|
-
|
|
1952
|
-
|
|
1953
|
-
|
|
1954
|
-
|
|
1955
|
-
setBusy(null);
|
|
1956
|
-
}, children: "Stop loading rows" }) : null,
|
|
1957
|
-
ai && aiFailed && aiSession.current?.recover && busy !== "ai" ? /* @__PURE__ */ jsx8(Button, { type: "button", variant: "outline", onClick: () => void runAi(true), children: aiFailed ? "Retry or rejoin AI run" : "Rejoin AI run" }) : null,
|
|
1958
|
-
ai ? /* @__PURE__ */ jsx8("p", { className: "matrx-alchemy-meta", children: "AI creates a preview. It never copies automatically. Closing detaches this view without cancelling server work." }) : null,
|
|
1959
|
-
state.error ? /* @__PURE__ */ jsx8("p", { role: "alert", className: "matrx-alchemy-error", children: state.error }) : null
|
|
1960
|
-
] }) : null
|
|
1996
|
+
pendingControls ? /* @__PURE__ */ jsxs4("div", { className: "matrx-alchemy-decision", role: "alert", children: [
|
|
1997
|
+
/* @__PURE__ */ jsx8("p", { children: "This control would replace your manual edit." }),
|
|
1998
|
+
/* @__PURE__ */ jsx8(Button, { className: "matrx-alchemy-workspace-secondary", type: "button", variant: "outline", onClick: () => setPendingControls(null), children: "Keep edited draft" }),
|
|
1999
|
+
/* @__PURE__ */ jsx8(Button, { className: "matrx-alchemy-workspace-primary", type: "button", onClick: applyPendingControls, children: "Rebuild from source" })
|
|
2000
|
+
] }) : null,
|
|
2001
|
+
state.sourceStale ? /* @__PURE__ */ jsx8("p", { role: "alert", className: "matrx-alchemy-decision", children: "The source changed since this draft. Use Refresh source to review the latest data." }) : null,
|
|
2002
|
+
state.pending ? /* @__PURE__ */ jsxs4("div", { className: "matrx-alchemy-decision", role: "alert", children: [
|
|
2003
|
+
/* @__PURE__ */ jsx8("p", { children: "A fresh source snapshot is ready." }),
|
|
2004
|
+
/* @__PURE__ */ jsx8(Button, { className: "matrx-alchemy-workspace-secondary", type: "button", variant: "outline", onClick: () => resolveCapture("keep"), children: "Keep current snapshot and draft" }),
|
|
2005
|
+
/* @__PURE__ */ jsx8(Button, { className: "matrx-alchemy-workspace-primary", type: "button", onClick: () => resolveCapture("regenerate"), children: "Regenerate from fresh source" })
|
|
2006
|
+
] }) : null,
|
|
2007
|
+
deliveryNotice ? /* @__PURE__ */ jsx8("p", { role: "status", className: "matrx-alchemy-meta", children: deliveryNotice }) : null
|
|
1961
2008
|
] }),
|
|
1962
|
-
pendingControls ? /* @__PURE__ */ jsxs4("div", { className: "matrx-alchemy-decision", role: "alert", children: [
|
|
1963
|
-
/* @__PURE__ */ jsx8("p", { children: "This control would replace your manual edit." }),
|
|
1964
|
-
/* @__PURE__ */ jsx8(Button, { type: "button", variant: "outline", onClick: () => setPendingControls(null), children: "Keep edited draft" }),
|
|
1965
|
-
/* @__PURE__ */ jsx8(Button, { type: "button", onClick: applyPendingControls, children: "Rebuild from source" })
|
|
1966
|
-
] }) : null,
|
|
1967
|
-
state.sourceStale ? /* @__PURE__ */ jsx8("p", { role: "alert", className: "matrx-alchemy-decision", children: "The source changed since this draft. Use Refresh source to review the latest data." }) : null,
|
|
1968
|
-
state.pending ? /* @__PURE__ */ jsxs4("div", { className: "matrx-alchemy-decision", role: "alert", children: [
|
|
1969
|
-
/* @__PURE__ */ jsx8("p", { children: "A fresh source snapshot is ready." }),
|
|
1970
|
-
/* @__PURE__ */ jsx8(Button, { type: "button", variant: "outline", onClick: () => resolveCapture("keep"), children: "Keep current snapshot and draft" }),
|
|
1971
|
-
/* @__PURE__ */ jsx8(Button, { type: "button", onClick: () => resolveCapture("regenerate"), children: "Regenerate from fresh source" })
|
|
1972
|
-
] }) : null,
|
|
1973
|
-
deliveryNotice ? /* @__PURE__ */ jsx8("p", { role: "status", className: "matrx-alchemy-meta", children: deliveryNotice }) : null,
|
|
1974
2009
|
/* @__PURE__ */ jsxs4(DialogFooter, { children: [
|
|
1975
2010
|
/* @__PURE__ */ jsxs4("span", { className: "matrx-alchemy-meta", children: [
|
|
1976
2011
|
buffer.length.toLocaleString(),
|
|
@@ -1978,13 +2013,16 @@ function PreparationWorkspace({ restoreFocus, open, state, scopes, onClose, onCh
|
|
|
1978
2013
|
estimateTokens(buffer).toLocaleString(),
|
|
1979
2014
|
" tokens"
|
|
1980
2015
|
] }),
|
|
1981
|
-
/* @__PURE__ */ jsx8(Button, { type: "button", variant: "outline", onClick: close, children: "Close" }),
|
|
1982
|
-
/* @__PURE__ */ jsx8(Button, { type: "button", variant: "outline", disabled: busy !== null || Boolean(bufferError || formatError) || !preparedArtifact, onClick: () => void deliver(true), children: "Download
|
|
1983
|
-
/* @__PURE__ */ jsx8(Button, { type: "button", disabled: busy !== null || Boolean(bufferError || formatError) || !preparedArtifact, onClick: () => void deliver(false), children: "Copy
|
|
2016
|
+
/* @__PURE__ */ jsx8(Button, { type: "button", variant: "outline", className: "matrx-alchemy-workspace-secondary", onClick: close, children: "Close" }),
|
|
2017
|
+
/* @__PURE__ */ jsx8(Button, { type: "button", variant: "outline", className: "matrx-alchemy-workspace-secondary", "aria-label": "Download prepared output", disabled: busy !== null || Boolean(bufferError || formatError) || !preparedArtifact, onClick: () => void deliver(true), children: "Download" }),
|
|
2018
|
+
/* @__PURE__ */ jsx8(Button, { type: "button", className: "matrx-alchemy-workspace-primary", "aria-label": "Copy prepared output", disabled: busy !== null || Boolean(bufferError || formatError) || !preparedArtifact, onClick: () => void deliver(false), children: "Copy" })
|
|
1984
2019
|
] })
|
|
1985
2020
|
] }) });
|
|
1986
2021
|
}
|
|
1987
2022
|
function RowControls({ rows, controls, change }) {
|
|
2023
|
+
const filterCount = Object.values(controls.filters).filter(Boolean).length;
|
|
2024
|
+
const selectionSummary = controls.selectedOnly ? `${controls.selectedIndices.length} selected row${controls.selectedIndices.length === 1 ? "" : "s"}` : "All rows";
|
|
2025
|
+
const dataSummary = [controls.search ? "search active" : "", controls.sort ? `sorted by ${rows.columns.find((column) => column.id === controls.sort)?.label ?? controls.sort}` : "", filterCount ? `${filterCount} filter${filterCount === 1 ? "" : "s"}` : ""].filter(Boolean).join(" \xB7 ");
|
|
1988
2026
|
return /* @__PURE__ */ jsxs4(Fragment2, { children: [
|
|
1989
2027
|
/* @__PURE__ */ jsxs4("div", { className: "matrx-alchemy-toolbar", children: [
|
|
1990
2028
|
/* @__PURE__ */ jsxs4("label", { children: [
|
|
@@ -2010,32 +2048,40 @@ function RowControls({ rows, controls, change }) {
|
|
|
2010
2048
|
/* @__PURE__ */ jsx8("input", { type: "number", min: "0", value: controls.top ?? "", onChange: (e) => change({ ...controls, top: Number.isNaN(e.target.valueAsNumber) ? null : e.target.valueAsNumber }) })
|
|
2011
2049
|
] })
|
|
2012
2050
|
] }),
|
|
2013
|
-
/* @__PURE__ */ jsxs4("
|
|
2014
|
-
/* @__PURE__ */
|
|
2015
|
-
|
|
2051
|
+
/* @__PURE__ */ jsxs4("details", { className: "matrx-alchemy-options", children: [
|
|
2052
|
+
/* @__PURE__ */ jsxs4("summary", { children: [
|
|
2053
|
+
"Columns and filters",
|
|
2054
|
+
dataSummary ? ` \u2014 ${dataSummary}` : ""
|
|
2055
|
+
] }),
|
|
2056
|
+
/* @__PURE__ */ jsx8("fieldset", { "aria-label": "Columns and filters", children: rows.columns.map((column) => /* @__PURE__ */ jsxs4("div", { className: "matrx-alchemy-column", children: [
|
|
2016
2057
|
/* @__PURE__ */ jsxs4("label", { children: [
|
|
2017
2058
|
/* @__PURE__ */ jsx8("input", { type: "checkbox", checked: controls.visibleColumns.includes(column.id), onChange: (e) => change({ ...controls, visibleColumns: e.target.checked ? [...controls.visibleColumns, column.id] : controls.visibleColumns.filter((id) => id !== column.id) }) }),
|
|
2018
2059
|
" ",
|
|
2019
2060
|
column.label
|
|
2020
2061
|
] }),
|
|
2021
2062
|
/* @__PURE__ */ jsx8("input", { "aria-label": `Filter ${column.label}`, placeholder: "Filter", value: controls.filters[column.id] ?? "", onChange: (e) => change({ ...controls, filters: { ...controls.filters, [column.id]: e.target.value } }) })
|
|
2022
|
-
] }, column.id))
|
|
2063
|
+
] }, column.id)) })
|
|
2023
2064
|
] }),
|
|
2024
|
-
/* @__PURE__ */ jsxs4("
|
|
2025
|
-
/* @__PURE__ */
|
|
2026
|
-
|
|
2027
|
-
|
|
2028
|
-
" Only selected rows"
|
|
2065
|
+
/* @__PURE__ */ jsxs4("details", { className: "matrx-alchemy-options", children: [
|
|
2066
|
+
/* @__PURE__ */ jsxs4("summary", { children: [
|
|
2067
|
+
"Rows \u2014 ",
|
|
2068
|
+
selectionSummary
|
|
2029
2069
|
] }),
|
|
2030
|
-
/* @__PURE__ */
|
|
2031
|
-
|
|
2032
|
-
|
|
2033
|
-
|
|
2034
|
-
|
|
2035
|
-
|
|
2036
|
-
summary
|
|
2037
|
-
|
|
2038
|
-
|
|
2070
|
+
/* @__PURE__ */ jsxs4("fieldset", { "aria-label": "Row selection", children: [
|
|
2071
|
+
/* @__PURE__ */ jsxs4("label", { children: [
|
|
2072
|
+
/* @__PURE__ */ jsx8("input", { type: "checkbox", checked: controls.selectedOnly, onChange: (e) => change({ ...controls, selectedOnly: e.target.checked }) }),
|
|
2073
|
+
" Only selected rows"
|
|
2074
|
+
] }),
|
|
2075
|
+
/* @__PURE__ */ jsx8("div", { className: "matrx-alchemy-row-list", children: rows.rows.map((row, index) => {
|
|
2076
|
+
const summary = rows.columns.filter((column) => column.visible).slice(0, 2).map((column) => String(readTransferCell(row, column) ?? "")).filter(Boolean).join(" \xB7 ");
|
|
2077
|
+
return /* @__PURE__ */ jsxs4("label", { children: [
|
|
2078
|
+
/* @__PURE__ */ jsx8("input", { type: "checkbox", checked: controls.selectedIndices.includes(index), onChange: (e) => change({ ...controls, selectedIndices: e.target.checked ? [...controls.selectedIndices, index] : controls.selectedIndices.filter((value) => value !== index) }) }),
|
|
2079
|
+
" Row ",
|
|
2080
|
+
index + 1,
|
|
2081
|
+
summary ? ` \u2014 ${summary}` : ""
|
|
2082
|
+
] }, index);
|
|
2083
|
+
}) })
|
|
2084
|
+
] })
|
|
2039
2085
|
] })
|
|
2040
2086
|
] });
|
|
2041
2087
|
}
|