@almadar/ui 5.128.0 → 5.130.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/avl/index.cjs +349 -11
- package/dist/avl/index.js +349 -11
- package/dist/components/index.cjs +352 -11
- package/dist/components/index.d.cts +119 -5
- package/dist/components/index.d.ts +119 -5
- package/dist/components/index.js +353 -12
- package/dist/providers/index.cjs +349 -11
- package/dist/providers/index.js +349 -11
- package/dist/runtime/index.cjs +349 -11
- package/dist/runtime/index.js +349 -11
- package/package.json +6 -5
- package/scripts/audit-tailwind-safelist.ts +237 -0
- package/scripts/export-static.js +61 -0
- package/scripts/generate-design-system.ts +344 -0
- package/scripts/generate-theme-from-schema.ts +480 -0
- package/scripts/generate.ts +835 -0
- package/scripts/strip-base-tokens-from-themes.mjs +179 -0
- package/scripts/suggest-components.ts +508 -0
- package/scripts/theme-contrast-audit.mjs +132 -0
- package/scripts/types.ts +282 -0
- package/themes/_contract.md +1 -1
package/dist/components/index.js
CHANGED
|
@@ -22630,7 +22630,7 @@ var init_useQuerySingleton = __esm({
|
|
|
22630
22630
|
queryStores = /* @__PURE__ */ new Map();
|
|
22631
22631
|
}
|
|
22632
22632
|
});
|
|
22633
|
-
var resolveFilterType, lookStyles6, FilterGroup;
|
|
22633
|
+
var resolveFilterType, lookStyles6, FilterGroupControls, FilterGroupPopover, FilterGroup;
|
|
22634
22634
|
var init_FilterGroup = __esm({
|
|
22635
22635
|
"components/core/molecules/FilterGroup.tsx"() {
|
|
22636
22636
|
"use client";
|
|
@@ -22648,10 +22648,10 @@ var init_FilterGroup = __esm({
|
|
|
22648
22648
|
toolbar: "",
|
|
22649
22649
|
chips: "gap-1 [&_input]:rounded-pill [&_select]:rounded-pill [&_button]:rounded-pill [&_input]:!px-3 [&_select]:!px-3 [&_input]:bg-muted [&_select]:bg-muted [&_label]:hidden",
|
|
22650
22650
|
pills: "gap-2 [&_input]:rounded-pill [&_select]:rounded-pill [&_button]:rounded-pill",
|
|
22651
|
-
"popover-trigger": "
|
|
22651
|
+
"popover-trigger": "",
|
|
22652
22652
|
"inline-column-header": "hidden"
|
|
22653
22653
|
};
|
|
22654
|
-
|
|
22654
|
+
FilterGroupControls = ({
|
|
22655
22655
|
entity,
|
|
22656
22656
|
filters,
|
|
22657
22657
|
onFilterChange,
|
|
@@ -22987,7 +22987,7 @@ var init_FilterGroup = __esm({
|
|
|
22987
22987
|
className: "text-muted-foreground",
|
|
22988
22988
|
children: [
|
|
22989
22989
|
/* @__PURE__ */ jsx(Icon, { name: "filter", className: "h-4 w-4" }),
|
|
22990
|
-
/* @__PURE__ */ jsx("span", { className: "text-
|
|
22990
|
+
/* @__PURE__ */ jsx("span", { className: "text-xs font-bold uppercase tracking-wide", children: t("filterGroup.filters") })
|
|
22991
22991
|
]
|
|
22992
22992
|
}
|
|
22993
22993
|
),
|
|
@@ -23078,6 +23078,42 @@ var init_FilterGroup = __esm({
|
|
|
23078
23078
|
}
|
|
23079
23079
|
);
|
|
23080
23080
|
};
|
|
23081
|
+
FilterGroupControls.displayName = "FilterGroupControls";
|
|
23082
|
+
FilterGroupPopover = (props) => {
|
|
23083
|
+
const { t } = useTranslate();
|
|
23084
|
+
const [open, setOpen] = useState(false);
|
|
23085
|
+
const queryState = useQuerySingleton(props.query);
|
|
23086
|
+
const activeFilterCount = queryState?.filters ? Object.values(queryState.filters).filter((v) => v !== null && v !== void 0).length : 0;
|
|
23087
|
+
return /* @__PURE__ */ jsxs("div", { className: cn("relative inline-block", props.className), children: [
|
|
23088
|
+
/* @__PURE__ */ jsx(
|
|
23089
|
+
Button,
|
|
23090
|
+
{
|
|
23091
|
+
variant: activeFilterCount > 0 ? "secondary" : "ghost",
|
|
23092
|
+
size: "sm",
|
|
23093
|
+
leftIcon: "filter",
|
|
23094
|
+
onClick: () => setOpen((o) => !o),
|
|
23095
|
+
"aria-expanded": open,
|
|
23096
|
+
"aria-haspopup": "true",
|
|
23097
|
+
children: /* @__PURE__ */ jsxs(HStack, { gap: "xs", align: "center", children: [
|
|
23098
|
+
/* @__PURE__ */ jsx("span", { children: t("filterGroup.filters") }),
|
|
23099
|
+
activeFilterCount > 0 && /* @__PURE__ */ jsx(Badge, { variant: "primary", size: "sm", children: activeFilterCount })
|
|
23100
|
+
] })
|
|
23101
|
+
}
|
|
23102
|
+
),
|
|
23103
|
+
open && /* @__PURE__ */ jsx("div", { className: "absolute left-0 z-50 mt-2 min-w-[16rem] rounded-lg border border-[var(--color-border)] bg-[var(--color-card)] p-card-md shadow-main", children: /* @__PURE__ */ jsx(
|
|
23104
|
+
FilterGroupControls,
|
|
23105
|
+
{
|
|
23106
|
+
...props,
|
|
23107
|
+
className: void 0,
|
|
23108
|
+
look: "toolbar",
|
|
23109
|
+
variant: "vertical",
|
|
23110
|
+
showIcon: false
|
|
23111
|
+
}
|
|
23112
|
+
) })
|
|
23113
|
+
] });
|
|
23114
|
+
};
|
|
23115
|
+
FilterGroupPopover.displayName = "FilterGroupPopover";
|
|
23116
|
+
FilterGroup = (props) => props.look === "popover-trigger" ? /* @__PURE__ */ jsx(FilterGroupPopover, { ...props }) : /* @__PURE__ */ jsx(FilterGroupControls, { ...props });
|
|
23081
23117
|
FilterGroup.displayName = "FilterGroup";
|
|
23082
23118
|
}
|
|
23083
23119
|
});
|
|
@@ -28547,12 +28583,12 @@ var init_MapView = __esm({
|
|
|
28547
28583
|
shadowSize: [41, 41]
|
|
28548
28584
|
});
|
|
28549
28585
|
L.Marker.prototype.options.icon = defaultIcon;
|
|
28550
|
-
const { useEffect: useEffect65, useRef:
|
|
28586
|
+
const { useEffect: useEffect65, useRef: useRef63, useCallback: useCallback105, useState: useState102 } = React74__default;
|
|
28551
28587
|
const { Typography: Typography2 } = await Promise.resolve().then(() => (init_Typography(), Typography_exports));
|
|
28552
28588
|
const { useEventBus: useEventBus2 } = await Promise.resolve().then(() => (init_useEventBus(), useEventBus_exports));
|
|
28553
28589
|
function MapUpdater({ centerLat, centerLng, zoom }) {
|
|
28554
28590
|
const map = useMap();
|
|
28555
|
-
const prevRef =
|
|
28591
|
+
const prevRef = useRef63({ centerLat, centerLng, zoom });
|
|
28556
28592
|
useEffect65(() => {
|
|
28557
28593
|
const prev = prevRef.current;
|
|
28558
28594
|
if (prev.centerLat !== centerLat || prev.centerLng !== centerLng || prev.zoom !== zoom) {
|
|
@@ -29531,9 +29567,19 @@ function TableView({
|
|
|
29531
29567
|
const inlineActionCount = hasActions ? maxInlineActions != null ? Math.min(itemActions.length, maxInlineActions) : itemActions.length : 0;
|
|
29532
29568
|
const hasOverflowActions = hasActions && maxInlineActions != null && itemActions.length > maxInlineActions;
|
|
29533
29569
|
const actionsTrack = hasActions ? `${inlineActionCount * 6 + (hasOverflowActions ? 3 : 0)}rem` : null;
|
|
29570
|
+
const colFloors = React74__default.useMemo(
|
|
29571
|
+
() => colDefs.map((col) => {
|
|
29572
|
+
const longest = data.reduce((widest, row) => {
|
|
29573
|
+
const cell = formatCell(asFieldValue(getNestedValue(row, col.field ?? col.key)), col.format);
|
|
29574
|
+
return Math.max(widest, cell.length);
|
|
29575
|
+
}, columnLabel(col).length);
|
|
29576
|
+
return Math.min(longest, MAX_MEASURED_COL_CH);
|
|
29577
|
+
}),
|
|
29578
|
+
[colDefs, data]
|
|
29579
|
+
);
|
|
29534
29580
|
const gridTemplateColumns = [
|
|
29535
29581
|
selectable ? "auto" : null,
|
|
29536
|
-
...colDefs.map((c) => c.width ??
|
|
29582
|
+
...colDefs.map((c, i) => c.width ?? `minmax(${colFloors[i]}ch, 1fr)`),
|
|
29537
29583
|
actionsTrack
|
|
29538
29584
|
].filter(Boolean).join(" ");
|
|
29539
29585
|
const header = /* @__PURE__ */ jsxs(
|
|
@@ -29700,7 +29746,7 @@ function TableView({
|
|
|
29700
29746
|
}
|
|
29701
29747
|
);
|
|
29702
29748
|
}
|
|
29703
|
-
var alignClass, weightClass, LOOKS;
|
|
29749
|
+
var MAX_MEASURED_COL_CH, alignClass, weightClass, LOOKS;
|
|
29704
29750
|
var init_TableView = __esm({
|
|
29705
29751
|
"components/core/molecules/TableView.tsx"() {
|
|
29706
29752
|
"use client";
|
|
@@ -29718,6 +29764,7 @@ var init_TableView = __esm({
|
|
|
29718
29764
|
init_Menu();
|
|
29719
29765
|
init_useDataDnd();
|
|
29720
29766
|
createLogger("almadar:ui:table-view");
|
|
29767
|
+
MAX_MEASURED_COL_CH = 32;
|
|
29721
29768
|
alignClass = {
|
|
29722
29769
|
left: "justify-start text-left",
|
|
29723
29770
|
center: "justify-center text-center",
|
|
@@ -37742,6 +37789,293 @@ var init_GraphCanvas = __esm({
|
|
|
37742
37789
|
GraphCanvas.displayName = "GraphCanvas";
|
|
37743
37790
|
}
|
|
37744
37791
|
});
|
|
37792
|
+
var ImportSourcePicker;
|
|
37793
|
+
var init_ImportSourcePicker = __esm({
|
|
37794
|
+
"components/core/molecules/import/ImportSourcePicker.tsx"() {
|
|
37795
|
+
"use client";
|
|
37796
|
+
init_Box();
|
|
37797
|
+
init_Icon();
|
|
37798
|
+
init_Typography();
|
|
37799
|
+
init_cn();
|
|
37800
|
+
ImportSourcePicker = ({
|
|
37801
|
+
sources,
|
|
37802
|
+
onSelect,
|
|
37803
|
+
onFilesSelected,
|
|
37804
|
+
title,
|
|
37805
|
+
moreSources,
|
|
37806
|
+
className
|
|
37807
|
+
}) => {
|
|
37808
|
+
const fileInputRef = useRef(null);
|
|
37809
|
+
const handlePick = (source) => {
|
|
37810
|
+
if (source.disabled) return;
|
|
37811
|
+
if (source.kind === "file") {
|
|
37812
|
+
const input = fileInputRef.current;
|
|
37813
|
+
if (!input) return;
|
|
37814
|
+
input.accept = source.accept ?? "";
|
|
37815
|
+
input.multiple = source.multiple ?? false;
|
|
37816
|
+
input.click();
|
|
37817
|
+
return;
|
|
37818
|
+
}
|
|
37819
|
+
onSelect?.(source.id);
|
|
37820
|
+
};
|
|
37821
|
+
const handleFiles = (event) => {
|
|
37822
|
+
const files = event.target.files ? Array.from(event.target.files) : [];
|
|
37823
|
+
event.target.value = "";
|
|
37824
|
+
if (files.length > 0) onFilesSelected?.(files);
|
|
37825
|
+
};
|
|
37826
|
+
return /* @__PURE__ */ jsxs(Box, { className: cn("flex flex-col gap-2", className), children: [
|
|
37827
|
+
title ? /* @__PURE__ */ jsx(Typography, { variant: "h4", children: title }) : null,
|
|
37828
|
+
sources.map((source) => /* @__PURE__ */ jsxs(
|
|
37829
|
+
Box,
|
|
37830
|
+
{
|
|
37831
|
+
role: "button",
|
|
37832
|
+
tabIndex: source.disabled ? -1 : 0,
|
|
37833
|
+
"aria-disabled": source.disabled,
|
|
37834
|
+
onClick: () => handlePick(source),
|
|
37835
|
+
onKeyDown: (event) => {
|
|
37836
|
+
if (event.key === "Enter" || event.key === " ") {
|
|
37837
|
+
event.preventDefault();
|
|
37838
|
+
handlePick(source);
|
|
37839
|
+
}
|
|
37840
|
+
},
|
|
37841
|
+
className: cn(
|
|
37842
|
+
"flex items-center gap-3 rounded-md border border-border bg-card px-4 py-3 text-left",
|
|
37843
|
+
source.disabled ? "opacity-50 cursor-not-allowed" : "cursor-pointer hover:bg-accent hover:text-accent-foreground"
|
|
37844
|
+
),
|
|
37845
|
+
children: [
|
|
37846
|
+
source.icon ? /* @__PURE__ */ jsx(Icon, { icon: source.icon, size: "md" }) : null,
|
|
37847
|
+
/* @__PURE__ */ jsxs(Box, { className: "flex flex-col", children: [
|
|
37848
|
+
/* @__PURE__ */ jsx(Typography, { variant: "label", children: source.label }),
|
|
37849
|
+
source.description ? /* @__PURE__ */ jsx(Typography, { variant: "caption", className: "text-muted-foreground", children: source.description }) : null
|
|
37850
|
+
] })
|
|
37851
|
+
]
|
|
37852
|
+
},
|
|
37853
|
+
source.id
|
|
37854
|
+
)),
|
|
37855
|
+
moreSources,
|
|
37856
|
+
/* @__PURE__ */ jsx(
|
|
37857
|
+
"input",
|
|
37858
|
+
{
|
|
37859
|
+
ref: fileInputRef,
|
|
37860
|
+
type: "file",
|
|
37861
|
+
className: "hidden",
|
|
37862
|
+
onChange: handleFiles,
|
|
37863
|
+
"data-testid": "import-source-file-input"
|
|
37864
|
+
}
|
|
37865
|
+
)
|
|
37866
|
+
] });
|
|
37867
|
+
};
|
|
37868
|
+
}
|
|
37869
|
+
});
|
|
37870
|
+
function formatFieldValue(value) {
|
|
37871
|
+
if (value === null) return "\u2014";
|
|
37872
|
+
if (value instanceof Date) return value.toISOString();
|
|
37873
|
+
if (Array.isArray(value)) return value.map(formatFieldValue).join(", ");
|
|
37874
|
+
if (typeof value === "object") return JSON.stringify(value);
|
|
37875
|
+
return String(value);
|
|
37876
|
+
}
|
|
37877
|
+
function unitTitle(unit) {
|
|
37878
|
+
for (const key of TITLE_KEYS) {
|
|
37879
|
+
const value = unit.fields[key];
|
|
37880
|
+
if (typeof value === "string" && value.length > 0) return value;
|
|
37881
|
+
}
|
|
37882
|
+
return unit.ref;
|
|
37883
|
+
}
|
|
37884
|
+
function fieldSummary(unit) {
|
|
37885
|
+
return Object.entries(unit.fields).filter(([key]) => !TITLE_KEYS.includes(key)).map(([key, value]) => `${key}: ${formatFieldValue(value)}`).join(" \xB7 ");
|
|
37886
|
+
}
|
|
37887
|
+
var TITLE_KEYS, ImportPreviewTree;
|
|
37888
|
+
var init_ImportPreviewTree = __esm({
|
|
37889
|
+
"components/core/molecules/import/ImportPreviewTree.tsx"() {
|
|
37890
|
+
"use client";
|
|
37891
|
+
init_Box();
|
|
37892
|
+
init_Badge();
|
|
37893
|
+
init_Button();
|
|
37894
|
+
init_Icon();
|
|
37895
|
+
init_Typography();
|
|
37896
|
+
init_cn();
|
|
37897
|
+
TITLE_KEYS = ["title", "name", "label"];
|
|
37898
|
+
ImportPreviewTree = ({
|
|
37899
|
+
units,
|
|
37900
|
+
skipped = [],
|
|
37901
|
+
entityDisplay,
|
|
37902
|
+
onConfirm,
|
|
37903
|
+
onCancel,
|
|
37904
|
+
confirmLabel = "Confirm import",
|
|
37905
|
+
cancelLabel = "Cancel",
|
|
37906
|
+
indent = 16,
|
|
37907
|
+
className
|
|
37908
|
+
}) => {
|
|
37909
|
+
const groups = /* @__PURE__ */ new Map();
|
|
37910
|
+
for (const unit of units) {
|
|
37911
|
+
const group = groups.get(unit.targetEntity);
|
|
37912
|
+
if (group) group.push(unit);
|
|
37913
|
+
else groups.set(unit.targetEntity, [unit]);
|
|
37914
|
+
}
|
|
37915
|
+
const renderUnit = (unit, childrenByParent, depth) => {
|
|
37916
|
+
const summary = fieldSummary(unit);
|
|
37917
|
+
const children = childrenByParent.get(unit.ref) ?? [];
|
|
37918
|
+
return /* @__PURE__ */ jsxs(React74__default.Fragment, { children: [
|
|
37919
|
+
/* @__PURE__ */ jsxs(
|
|
37920
|
+
Box,
|
|
37921
|
+
{
|
|
37922
|
+
className: "flex flex-col py-1",
|
|
37923
|
+
style: { paddingLeft: depth * indent },
|
|
37924
|
+
"data-testid": `import-preview-unit-${unit.ref}`,
|
|
37925
|
+
children: [
|
|
37926
|
+
/* @__PURE__ */ jsxs(Box, { className: "flex items-center gap-2", children: [
|
|
37927
|
+
/* @__PURE__ */ jsx(Icon, { icon: "file-text", size: "xs", className: "text-muted-foreground" }),
|
|
37928
|
+
/* @__PURE__ */ jsx(Typography, { variant: "body2", children: unitTitle(unit) })
|
|
37929
|
+
] }),
|
|
37930
|
+
summary ? /* @__PURE__ */ jsx(Typography, { variant: "caption", className: "text-muted-foreground", children: summary }) : null
|
|
37931
|
+
]
|
|
37932
|
+
}
|
|
37933
|
+
),
|
|
37934
|
+
children.map((child) => renderUnit(child, childrenByParent, depth + 1))
|
|
37935
|
+
] }, unit.ref);
|
|
37936
|
+
};
|
|
37937
|
+
return /* @__PURE__ */ jsxs(Box, { className: cn("flex flex-col gap-4", className), children: [
|
|
37938
|
+
units.length === 0 ? /* @__PURE__ */ jsx(Typography, { variant: "body2", className: "text-muted-foreground", children: "No units staged." }) : null,
|
|
37939
|
+
Array.from(groups.entries()).map(([entity, groupUnits]) => {
|
|
37940
|
+
const refs = new Set(groupUnits.map((unit) => unit.ref));
|
|
37941
|
+
const childrenByParent = /* @__PURE__ */ new Map();
|
|
37942
|
+
const roots = [];
|
|
37943
|
+
for (const unit of groupUnits) {
|
|
37944
|
+
if (unit.parentRef && refs.has(unit.parentRef)) {
|
|
37945
|
+
const siblings = childrenByParent.get(unit.parentRef);
|
|
37946
|
+
if (siblings) siblings.push(unit);
|
|
37947
|
+
else childrenByParent.set(unit.parentRef, [unit]);
|
|
37948
|
+
} else {
|
|
37949
|
+
roots.push(unit);
|
|
37950
|
+
}
|
|
37951
|
+
}
|
|
37952
|
+
const label = entityDisplay[entity]?.plural ?? entity;
|
|
37953
|
+
return /* @__PURE__ */ jsxs(Box, { border: true, className: "rounded-md border-border bg-card p-3", children: [
|
|
37954
|
+
/* @__PURE__ */ jsxs(Box, { className: "flex items-center gap-2 pb-2", children: [
|
|
37955
|
+
/* @__PURE__ */ jsx(Typography, { variant: "label", children: label }),
|
|
37956
|
+
/* @__PURE__ */ jsx(Badge, { amount: groupUnits.length })
|
|
37957
|
+
] }),
|
|
37958
|
+
roots.map((unit) => renderUnit(unit, childrenByParent, 0))
|
|
37959
|
+
] }, entity);
|
|
37960
|
+
}),
|
|
37961
|
+
skipped.length > 0 ? /* @__PURE__ */ jsxs(Box, { border: true, className: "rounded-md border-border bg-card p-3", children: [
|
|
37962
|
+
/* @__PURE__ */ jsxs(Box, { className: "flex items-center gap-2 pb-2", children: [
|
|
37963
|
+
/* @__PURE__ */ jsx(Typography, { variant: "label", children: "Skipped" }),
|
|
37964
|
+
/* @__PURE__ */ jsx(Badge, { amount: skipped.length })
|
|
37965
|
+
] }),
|
|
37966
|
+
skipped.map((element) => /* @__PURE__ */ jsxs(Box, { className: "flex items-baseline gap-2 py-1", children: [
|
|
37967
|
+
/* @__PURE__ */ jsx(Typography, { variant: "body2", children: element.ref }),
|
|
37968
|
+
/* @__PURE__ */ jsx(Typography, { variant: "caption", className: "text-muted-foreground", children: element.reason })
|
|
37969
|
+
] }, element.ref))
|
|
37970
|
+
] }) : null,
|
|
37971
|
+
onConfirm || onCancel ? /* @__PURE__ */ jsxs(Box, { className: "flex items-center justify-end gap-2", children: [
|
|
37972
|
+
onCancel ? /* @__PURE__ */ jsx(Button, { variant: "default", label: cancelLabel, onClick: onCancel }) : null,
|
|
37973
|
+
onConfirm ? /* @__PURE__ */ jsx(Button, { variant: "primary", label: confirmLabel, onClick: onConfirm }) : null
|
|
37974
|
+
] }) : null
|
|
37975
|
+
] });
|
|
37976
|
+
};
|
|
37977
|
+
}
|
|
37978
|
+
});
|
|
37979
|
+
var PIPELINE, DEFAULT_LABELS, ImportProgress;
|
|
37980
|
+
var init_ImportProgress = __esm({
|
|
37981
|
+
"components/core/molecules/import/ImportProgress.tsx"() {
|
|
37982
|
+
"use client";
|
|
37983
|
+
init_Box();
|
|
37984
|
+
init_Badge();
|
|
37985
|
+
init_Icon();
|
|
37986
|
+
init_Typography();
|
|
37987
|
+
init_cn();
|
|
37988
|
+
PIPELINE = [
|
|
37989
|
+
"fetching",
|
|
37990
|
+
"mapping",
|
|
37991
|
+
"reviewing",
|
|
37992
|
+
"committing"
|
|
37993
|
+
];
|
|
37994
|
+
DEFAULT_LABELS = {
|
|
37995
|
+
fetching: "Fetching",
|
|
37996
|
+
mapping: "Mapping",
|
|
37997
|
+
reviewing: "Reviewing",
|
|
37998
|
+
committing: "Committing",
|
|
37999
|
+
done: "Done",
|
|
38000
|
+
failed: "Failed"
|
|
38001
|
+
};
|
|
38002
|
+
ImportProgress = ({
|
|
38003
|
+
step,
|
|
38004
|
+
counts,
|
|
38005
|
+
labels,
|
|
38006
|
+
className
|
|
38007
|
+
}) => {
|
|
38008
|
+
const label = (key) => labels?.[key] ?? DEFAULT_LABELS[key];
|
|
38009
|
+
const currentIndex = step === "done" || step === "failed" ? PIPELINE.length : PIPELINE.indexOf(step);
|
|
38010
|
+
return /* @__PURE__ */ jsxs(Box, { className: cn("flex flex-col gap-3", className), children: [
|
|
38011
|
+
/* @__PURE__ */ jsxs(Box, { className: "flex items-center gap-2", children: [
|
|
38012
|
+
PIPELINE.map((key, index) => {
|
|
38013
|
+
const isComplete = index < currentIndex;
|
|
38014
|
+
const isActive = index === currentIndex;
|
|
38015
|
+
return /* @__PURE__ */ jsxs(React74__default.Fragment, { children: [
|
|
38016
|
+
index > 0 ? /* @__PURE__ */ jsx(Box, { className: "h-px w-4 bg-border" }) : null,
|
|
38017
|
+
/* @__PURE__ */ jsxs(Box, { className: "flex items-center gap-1", "data-testid": `import-progress-step-${key}`, children: [
|
|
38018
|
+
/* @__PURE__ */ jsx(
|
|
38019
|
+
Icon,
|
|
38020
|
+
{
|
|
38021
|
+
icon: isComplete ? "check" : isActive ? "loader" : "circle",
|
|
38022
|
+
size: "sm",
|
|
38023
|
+
className: cn(
|
|
38024
|
+
isComplete ? "text-success" : isActive ? "text-primary" : "text-muted-foreground"
|
|
38025
|
+
)
|
|
38026
|
+
}
|
|
38027
|
+
),
|
|
38028
|
+
/* @__PURE__ */ jsx(
|
|
38029
|
+
Typography,
|
|
38030
|
+
{
|
|
38031
|
+
variant: "caption",
|
|
38032
|
+
className: cn(isActive ? "text-foreground" : "text-muted-foreground"),
|
|
38033
|
+
children: label(key)
|
|
38034
|
+
}
|
|
38035
|
+
)
|
|
38036
|
+
] })
|
|
38037
|
+
] }, key);
|
|
38038
|
+
}),
|
|
38039
|
+
step === "done" || step === "failed" ? /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
38040
|
+
/* @__PURE__ */ jsx(Box, { className: "h-px w-4 bg-border" }),
|
|
38041
|
+
/* @__PURE__ */ jsxs(Box, { className: "flex items-center gap-1", "data-testid": `import-progress-step-${step}`, children: [
|
|
38042
|
+
/* @__PURE__ */ jsx(
|
|
38043
|
+
Icon,
|
|
38044
|
+
{
|
|
38045
|
+
icon: step === "done" ? "check" : "x",
|
|
38046
|
+
size: "sm",
|
|
38047
|
+
className: step === "done" ? "text-success" : "text-error"
|
|
38048
|
+
}
|
|
38049
|
+
),
|
|
38050
|
+
/* @__PURE__ */ jsx(
|
|
38051
|
+
Typography,
|
|
38052
|
+
{
|
|
38053
|
+
variant: "caption",
|
|
38054
|
+
className: step === "done" ? "text-success" : "text-error",
|
|
38055
|
+
children: label(step)
|
|
38056
|
+
}
|
|
38057
|
+
)
|
|
38058
|
+
] })
|
|
38059
|
+
] }) : null
|
|
38060
|
+
] }),
|
|
38061
|
+
counts ? /* @__PURE__ */ jsxs(Box, { className: "flex items-center gap-2", children: [
|
|
38062
|
+
counts.staged !== void 0 ? /* @__PURE__ */ jsx(Badge, { label: `Staged ${counts.staged}` }) : null,
|
|
38063
|
+
counts.committed !== void 0 ? /* @__PURE__ */ jsx(Badge, { variant: "success", label: `Committed ${counts.committed}` }) : null,
|
|
38064
|
+
counts.failed !== void 0 ? /* @__PURE__ */ jsx(Badge, { variant: "danger", label: `Failed ${counts.failed}` }) : null
|
|
38065
|
+
] }) : null
|
|
38066
|
+
] });
|
|
38067
|
+
};
|
|
38068
|
+
}
|
|
38069
|
+
});
|
|
38070
|
+
|
|
38071
|
+
// components/core/molecules/import/index.ts
|
|
38072
|
+
var init_import = __esm({
|
|
38073
|
+
"components/core/molecules/import/index.ts"() {
|
|
38074
|
+
init_ImportSourcePicker();
|
|
38075
|
+
init_ImportPreviewTree();
|
|
38076
|
+
init_ImportProgress();
|
|
38077
|
+
}
|
|
38078
|
+
});
|
|
37745
38079
|
var ReflectionBlock;
|
|
37746
38080
|
var init_ReflectionBlock = __esm({
|
|
37747
38081
|
"components/core/molecules/ReflectionBlock.tsx"() {
|
|
@@ -38028,6 +38362,7 @@ var init_molecules2 = __esm({
|
|
|
38028
38362
|
init_SignaturePad();
|
|
38029
38363
|
init_DocumentViewer();
|
|
38030
38364
|
init_GraphCanvas();
|
|
38365
|
+
init_import();
|
|
38031
38366
|
init_ActivationBlock();
|
|
38032
38367
|
init_ReflectionBlock();
|
|
38033
38368
|
init_ConnectionBlock();
|
|
@@ -38514,7 +38849,7 @@ function getBadgeVariant(fieldName, value) {
|
|
|
38514
38849
|
function formatFieldLabel(fieldName) {
|
|
38515
38850
|
return fieldName.replace(/([A-Z])/g, " $1").replace(/^./, (str2) => str2.toUpperCase());
|
|
38516
38851
|
}
|
|
38517
|
-
function
|
|
38852
|
+
function formatFieldValue2(value, fieldName) {
|
|
38518
38853
|
if (typeof value === "number") {
|
|
38519
38854
|
if (fieldName.toLowerCase().includes("progress") || fieldName.toLowerCase().includes("percent")) {
|
|
38520
38855
|
return `${value}%`;
|
|
@@ -38609,7 +38944,7 @@ function renderRichFieldValue(value, fieldName, fieldType) {
|
|
|
38609
38944
|
return str2;
|
|
38610
38945
|
}
|
|
38611
38946
|
default:
|
|
38612
|
-
return
|
|
38947
|
+
return formatFieldValue2(value, fieldName);
|
|
38613
38948
|
}
|
|
38614
38949
|
}
|
|
38615
38950
|
function normalizeFieldDefs(fields) {
|
|
@@ -38720,7 +39055,7 @@ var init_DetailPanel = __esm({
|
|
|
38720
39055
|
const value = getNestedValue(normalizedData, field);
|
|
38721
39056
|
return {
|
|
38722
39057
|
label: labelFor(field),
|
|
38723
|
-
value:
|
|
39058
|
+
value: formatFieldValue2(value, field),
|
|
38724
39059
|
icon: getFieldIcon(field)
|
|
38725
39060
|
};
|
|
38726
39061
|
}
|
|
@@ -44732,6 +45067,9 @@ var init_component_registry_generated = __esm({
|
|
|
44732
45067
|
init_HeroOrganism();
|
|
44733
45068
|
init_HeroSection();
|
|
44734
45069
|
init_Icon();
|
|
45070
|
+
init_ImportPreviewTree();
|
|
45071
|
+
init_ImportProgress();
|
|
45072
|
+
init_ImportSourcePicker();
|
|
44735
45073
|
init_InfiniteScrollSentinel();
|
|
44736
45074
|
init_Input();
|
|
44737
45075
|
init_InputGroup();
|
|
@@ -44995,6 +45333,9 @@ var init_component_registry_generated = __esm({
|
|
|
44995
45333
|
"HeroOrganism": HeroOrganism,
|
|
44996
45334
|
"HeroSection": HeroSection,
|
|
44997
45335
|
"Icon": Icon,
|
|
45336
|
+
"ImportPreviewTree": ImportPreviewTree,
|
|
45337
|
+
"ImportProgress": ImportProgress,
|
|
45338
|
+
"ImportSourcePicker": ImportSourcePicker,
|
|
44998
45339
|
"InfiniteScrollSentinel": InfiniteScrollSentinel,
|
|
44999
45340
|
"Input": Input,
|
|
45000
45341
|
"InputGroup": InputGroup,
|
|
@@ -48558,4 +48899,4 @@ function useGitHubBranches(owner, repo, enabled = true) {
|
|
|
48558
48899
|
});
|
|
48559
48900
|
}
|
|
48560
48901
|
|
|
48561
|
-
export { ALL_PRESETS, ALMADAR_DND_MIME, AR_BOOK_FIELDS, AboutPageTemplate, Accordion, Card2 as ActionCard, ActionPalette, ActionTile, ActivationBlock, Alert, AlgorithmCanvas, AnimatedCounter, AnimatedGraphic, AnimatedReveal, ArticleSection, Aside, AssetPicker, AtlasImage, AtlasPanel, AuthLayout, Avatar, Badge, BehaviorView, BiologyCanvas, BloomQuizBlock, BookChapterView, BookCoverPage, BookNavBar, BookTableOfContents, BookViewer, Box, BranchingLogicBuilder, Breadcrumb, Button, ButtonGroup, CTABanner, CalendarGrid, Canvas, Canvas2D, Card, CardBody, CardContent, CardFooter, CardGrid, CardHeader, CardTitle, Carousel, CaseStudyCard, CaseStudyOrganism, Center, Chart, ChartLegend, ChatBar, Checkbox, ChemistryCanvas, ChoiceButton, Coachmark, CodeBlock, CodeRunnerPanel, CollapsibleSection, CommunityLinks, ConditionalWrapper, ConfettiEffect, ConfirmDialog, ConnectionBlock, Container, ContentRenderer, ContentSection, ControlButton, ControlGrid, CounterTemplate, DEFAULT_LIKERT_OPTIONS, DEFAULT_MATRIX_COLUMNS, DEFAULT_SLOTS, DIAMOND_TOP_Y, DashboardGrid, DashboardLayout, DataGrid, DataList, DataTable, DateRangePicker, DateRangeSelector, DayCell, DetailPanel, Dialog, DialogueBubble, Divider, DocBreadcrumb, DocPagination, DocSearch, DocSidebar, DocTOC, DocumentViewer, StateMachineView as DomStateMachineVisualizer, Drawer, DrawerSlot, ELEMENT_SELECTED_EVENT, EdgeDecoration, EditorCheckbox, EditorSelect, EditorSlider, EditorTextInput, EditorToolbar, EmptyState, EntityDisplayEvents, ErrorBoundary, ErrorState, FEATURE_COLORS, FEATURE_TYPES, FLOOR_HEIGHT, FeatureCard, FeatureDetailPageTemplate, FeatureGrid, FeatureGridOrganism, FileTree, FilterGroup, FilterPill, Flex, FlipCard, FlipContainer, FloatingActionButton, Form, FormActions, FormField, FormLayout, FormSection, FormSectionHeader, GameAudioToggle, GameHud, GameIcon, GameMenu, GameShell, GenericAppTemplate, GeometricPattern, GradientDivider, GraphCanvas, GraphView, Grid, GridPicker, HStack, Header, HealthBar, HeroOrganism, HeroSection, I18nProvider, IDENTITY_BOOK_FIELDS, Icon, IconPicker, InfiniteScrollSentinel, Input, InputGroup, InstallBox, JazariStateMachine, JsonTreeEditor, Label, LandingPageTemplate, LawReferenceTooltip, LearningCanvas, Lightbox, LikertScale, LineChart2 as LineChart, List3 as List, LoadingState, MapView, MarkdownContent, MarketingFooter, MarketingStatCard, MasterDetail, MasterDetailLayout, MathCanvas, MatrixQuestion, MediaGallery, Menu, Meter, Modal, ModalSlot, ModuleCard, Navigation, NodeSlotEditor, NotifyListener, NumberStepper, OnboardingSpotlight, OptionConstraintGroup, StateMachineView as OrbitalStateMachineView, OrbitalVisualization, Overlay, PageHeader, PageTransition, Pagination, PatternTile, PhysicsCanvas, Popover, PositionedCanvas, Presence, PricingCard, PricingGrid, PricingOrganism, PricingPageTemplate, ProgressBar, ProgressDots, PropertyInspector, PullQuote, PullToRefresh, QrScanner, QuizBlock, Radio, RangeSlider, ReflectionBlock, RelationSelect, RepeatableFormSection, ReplyTree, RichBlockEditor, RuntimeDebugger, SHEET_COLUMNS, SPRITE_SHEET_LAYOUT, ScaledDiagram, ScoreDisplay, SearchInput, Section, SectionHeader, SegmentRenderer, Select, SequenceBar, ServiceCatalog, SharedEntityStoreContext, ShowcaseCard, ShowcaseOrganism, SidePanel, Sidebar, SignaturePad, SimpleGrid, Skeleton, SlotContentRenderer, SocialProof, SortableList, Spacer, Sparkline, Spinner, Split, SplitPane, SplitSection, Stack, StarRating, StatBadge, StatCard, StatDisplay, StateGraph, StateJsonView, StateMachineView, StateNode2 as StateNode, StatsGrid, StatsOrganism, StatusBar, StatusDot, StepFlow, StepFlowOrganism, SubagentTracePanel, SvgBranch, SvgConnection, SvgFlow, SvgGrid, SvgLobe, SvgMesh, SvgMorph, SvgNode, SvgPulse, SvgRing, SvgShield, SvgStack, SwipeableRow, Switch, TERRAIN_COLORS, TILE_HEIGHT, TILE_WIDTH, TabbedContainer, TableView, Tabs, TagCloud, TagInput, TeamCard, TeamOrganism, TerrainPalette, TextHighlight, Textarea, ThemeToggle, TimeSlotCell, Timeline, TimerDisplay, Toast, ToastSlot, Tooltip, TraitFrame, TraitSlot, TraitStateViewer, TransitionArrow, TrendIndicator, TypewriterText, Typography, UISlotComponent, UISlotRenderer, UploadDropZone, VStack, VersionDiff, ViolationAlert, VoteStack, WizardContainer, WizardNavigation, WizardProgress, boardEntity, bool, calculateAttackTargets, calculateValidMoves, cn, createInitialGameState, createSharedEntityStore, createTranslate, createUnitAnimationState, getCurrentFrame, getTileDimensions, inferDirection, isoToScreen, makeAsset, makeAssetMap, mapBookData, num, objAvailableActions, objAvailableEvents, objCurrentState, objIcon, objId, objMaxRules, objName, objRules, objStates, parseEditFocus, parseLessonSegments, parseMarkdownWithCodeBlocks, parseQueryBinding, pendulum, projectileMotion, registerCodeLanguageLoader, resolveFieldMap, resolveFrame, resolveSheetDirection, rows, runTickFrame, screenToIso, springOscillator, str, tickAnimationState, toCodeLanguage, transitionAnimation, unitHealth, unitPosition, unitTeam, useAgentChat, useAnchorRect, useAtlasSliceDataUrl, useAuthContext, useCamera, useCanvasGestures, useCompile, useConnectGitHub, useDeepAgentGeneration, useDisconnectGitHub, useDragReorder, useDraggable, useDropZone, useEmitEvent, useEventBus, useEventListener, useExtensions, useFileEditor, useFileSystem, useGameAudio, useGitHubBranches, useGitHubRepo, useGitHubRepos, useGitHubStatus, useImageCache, useInfiniteScroll, useLongPress, useOrbitalHistory, usePresence, usePreview, usePullToRefresh, useQuerySingleton, useRenderInterpolation, useSharedEntitySnapshot, useSharedEntityStore, useSharedEntityStoreContext, useSwipeGesture, useTapReveal, useTraitListens, useTranslate115 as useTranslate, useUIEvents, useUISlotManager, useUnitSpriteAtlas, useValidation, vec2 };
|
|
48902
|
+
export { ALL_PRESETS, ALMADAR_DND_MIME, AR_BOOK_FIELDS, AboutPageTemplate, Accordion, Card2 as ActionCard, ActionPalette, ActionTile, ActivationBlock, Alert, AlgorithmCanvas, AnimatedCounter, AnimatedGraphic, AnimatedReveal, ArticleSection, Aside, AssetPicker, AtlasImage, AtlasPanel, AuthLayout, Avatar, Badge, BehaviorView, BiologyCanvas, BloomQuizBlock, BookChapterView, BookCoverPage, BookNavBar, BookTableOfContents, BookViewer, Box, BranchingLogicBuilder, Breadcrumb, Button, ButtonGroup, CTABanner, CalendarGrid, Canvas, Canvas2D, Card, CardBody, CardContent, CardFooter, CardGrid, CardHeader, CardTitle, Carousel, CaseStudyCard, CaseStudyOrganism, Center, Chart, ChartLegend, ChatBar, Checkbox, ChemistryCanvas, ChoiceButton, Coachmark, CodeBlock, CodeRunnerPanel, CollapsibleSection, CommunityLinks, ConditionalWrapper, ConfettiEffect, ConfirmDialog, ConnectionBlock, Container, ContentRenderer, ContentSection, ControlButton, ControlGrid, CounterTemplate, DEFAULT_LIKERT_OPTIONS, DEFAULT_MATRIX_COLUMNS, DEFAULT_SLOTS, DIAMOND_TOP_Y, DashboardGrid, DashboardLayout, DataGrid, DataList, DataTable, DateRangePicker, DateRangeSelector, DayCell, DetailPanel, Dialog, DialogueBubble, Divider, DocBreadcrumb, DocPagination, DocSearch, DocSidebar, DocTOC, DocumentViewer, StateMachineView as DomStateMachineVisualizer, Drawer, DrawerSlot, ELEMENT_SELECTED_EVENT, EdgeDecoration, EditorCheckbox, EditorSelect, EditorSlider, EditorTextInput, EditorToolbar, EmptyState, EntityDisplayEvents, ErrorBoundary, ErrorState, FEATURE_COLORS, FEATURE_TYPES, FLOOR_HEIGHT, FeatureCard, FeatureDetailPageTemplate, FeatureGrid, FeatureGridOrganism, FileTree, FilterGroup, FilterPill, Flex, FlipCard, FlipContainer, FloatingActionButton, Form, FormActions, FormField, FormLayout, FormSection, FormSectionHeader, GameAudioToggle, GameHud, GameIcon, GameMenu, GameShell, GenericAppTemplate, GeometricPattern, GradientDivider, GraphCanvas, GraphView, Grid, GridPicker, HStack, Header, HealthBar, HeroOrganism, HeroSection, I18nProvider, IDENTITY_BOOK_FIELDS, Icon, IconPicker, ImportPreviewTree, ImportProgress, ImportSourcePicker, InfiniteScrollSentinel, Input, InputGroup, InstallBox, JazariStateMachine, JsonTreeEditor, Label, LandingPageTemplate, LawReferenceTooltip, LearningCanvas, Lightbox, LikertScale, LineChart2 as LineChart, List3 as List, LoadingState, MapView, MarkdownContent, MarketingFooter, MarketingStatCard, MasterDetail, MasterDetailLayout, MathCanvas, MatrixQuestion, MediaGallery, Menu, Meter, Modal, ModalSlot, ModuleCard, Navigation, NodeSlotEditor, NotifyListener, NumberStepper, OnboardingSpotlight, OptionConstraintGroup, StateMachineView as OrbitalStateMachineView, OrbitalVisualization, Overlay, PageHeader, PageTransition, Pagination, PatternTile, PhysicsCanvas, Popover, PositionedCanvas, Presence, PricingCard, PricingGrid, PricingOrganism, PricingPageTemplate, ProgressBar, ProgressDots, PropertyInspector, PullQuote, PullToRefresh, QrScanner, QuizBlock, Radio, RangeSlider, ReflectionBlock, RelationSelect, RepeatableFormSection, ReplyTree, RichBlockEditor, RuntimeDebugger, SHEET_COLUMNS, SPRITE_SHEET_LAYOUT, ScaledDiagram, ScoreDisplay, SearchInput, Section, SectionHeader, SegmentRenderer, Select, SequenceBar, ServiceCatalog, SharedEntityStoreContext, ShowcaseCard, ShowcaseOrganism, SidePanel, Sidebar, SignaturePad, SimpleGrid, Skeleton, SlotContentRenderer, SocialProof, SortableList, Spacer, Sparkline, Spinner, Split, SplitPane, SplitSection, Stack, StarRating, StatBadge, StatCard, StatDisplay, StateGraph, StateJsonView, StateMachineView, StateNode2 as StateNode, StatsGrid, StatsOrganism, StatusBar, StatusDot, StepFlow, StepFlowOrganism, SubagentTracePanel, SvgBranch, SvgConnection, SvgFlow, SvgGrid, SvgLobe, SvgMesh, SvgMorph, SvgNode, SvgPulse, SvgRing, SvgShield, SvgStack, SwipeableRow, Switch, TERRAIN_COLORS, TILE_HEIGHT, TILE_WIDTH, TabbedContainer, TableView, Tabs, TagCloud, TagInput, TeamCard, TeamOrganism, TerrainPalette, TextHighlight, Textarea, ThemeToggle, TimeSlotCell, Timeline, TimerDisplay, Toast, ToastSlot, Tooltip, TraitFrame, TraitSlot, TraitStateViewer, TransitionArrow, TrendIndicator, TypewriterText, Typography, UISlotComponent, UISlotRenderer, UploadDropZone, VStack, VersionDiff, ViolationAlert, VoteStack, WizardContainer, WizardNavigation, WizardProgress, boardEntity, bool, calculateAttackTargets, calculateValidMoves, cn, createInitialGameState, createSharedEntityStore, createTranslate, createUnitAnimationState, getCurrentFrame, getTileDimensions, inferDirection, isoToScreen, makeAsset, makeAssetMap, mapBookData, num, objAvailableActions, objAvailableEvents, objCurrentState, objIcon, objId, objMaxRules, objName, objRules, objStates, parseEditFocus, parseLessonSegments, parseMarkdownWithCodeBlocks, parseQueryBinding, pendulum, projectileMotion, registerCodeLanguageLoader, resolveFieldMap, resolveFrame, resolveSheetDirection, rows, runTickFrame, screenToIso, springOscillator, str, tickAnimationState, toCodeLanguage, transitionAnimation, unitHealth, unitPosition, unitTeam, useAgentChat, useAnchorRect, useAtlasSliceDataUrl, useAuthContext, useCamera, useCanvasGestures, useCompile, useConnectGitHub, useDeepAgentGeneration, useDisconnectGitHub, useDragReorder, useDraggable, useDropZone, useEmitEvent, useEventBus, useEventListener, useExtensions, useFileEditor, useFileSystem, useGameAudio, useGitHubBranches, useGitHubRepo, useGitHubRepos, useGitHubStatus, useImageCache, useInfiniteScroll, useLongPress, useOrbitalHistory, usePresence, usePreview, usePullToRefresh, useQuerySingleton, useRenderInterpolation, useSharedEntitySnapshot, useSharedEntityStore, useSharedEntityStoreContext, useSwipeGesture, useTapReveal, useTraitListens, useTranslate115 as useTranslate, useUIEvents, useUISlotManager, useUnitSpriteAtlas, useValidation, vec2 };
|