@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.
@@ -22705,7 +22705,7 @@ var init_useQuerySingleton = __esm({
22705
22705
  queryStores = /* @__PURE__ */ new Map();
22706
22706
  }
22707
22707
  });
22708
- var resolveFilterType, lookStyles6; exports.FilterGroup = void 0;
22708
+ var resolveFilterType, lookStyles6, FilterGroupControls, FilterGroupPopover; exports.FilterGroup = void 0;
22709
22709
  var init_FilterGroup = __esm({
22710
22710
  "components/core/molecules/FilterGroup.tsx"() {
22711
22711
  "use client";
@@ -22723,10 +22723,10 @@ var init_FilterGroup = __esm({
22723
22723
  toolbar: "",
22724
22724
  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",
22725
22725
  pills: "gap-2 [&_input]:rounded-pill [&_select]:rounded-pill [&_button]:rounded-pill",
22726
- "popover-trigger": "[&>*:not(:first-child)]:hidden",
22726
+ "popover-trigger": "",
22727
22727
  "inline-column-header": "hidden"
22728
22728
  };
22729
- exports.FilterGroup = ({
22729
+ FilterGroupControls = ({
22730
22730
  entity,
22731
22731
  filters,
22732
22732
  onFilterChange,
@@ -23062,7 +23062,7 @@ var init_FilterGroup = __esm({
23062
23062
  className: "text-muted-foreground",
23063
23063
  children: [
23064
23064
  /* @__PURE__ */ jsxRuntime.jsx(exports.Icon, { name: "filter", className: "h-4 w-4" }),
23065
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm font-bold uppercase tracking-wide", children: t("filterGroup.filters") })
23065
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs font-bold uppercase tracking-wide", children: t("filterGroup.filters") })
23066
23066
  ]
23067
23067
  }
23068
23068
  ),
@@ -23153,6 +23153,42 @@ var init_FilterGroup = __esm({
23153
23153
  }
23154
23154
  );
23155
23155
  };
23156
+ FilterGroupControls.displayName = "FilterGroupControls";
23157
+ FilterGroupPopover = (props) => {
23158
+ const { t } = hooks.useTranslate();
23159
+ const [open, setOpen] = React74.useState(false);
23160
+ const queryState = useQuerySingleton(props.query);
23161
+ const activeFilterCount = queryState?.filters ? Object.values(queryState.filters).filter((v) => v !== null && v !== void 0).length : 0;
23162
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("relative inline-block", props.className), children: [
23163
+ /* @__PURE__ */ jsxRuntime.jsx(
23164
+ exports.Button,
23165
+ {
23166
+ variant: activeFilterCount > 0 ? "secondary" : "ghost",
23167
+ size: "sm",
23168
+ leftIcon: "filter",
23169
+ onClick: () => setOpen((o) => !o),
23170
+ "aria-expanded": open,
23171
+ "aria-haspopup": "true",
23172
+ children: /* @__PURE__ */ jsxRuntime.jsxs(exports.HStack, { gap: "xs", align: "center", children: [
23173
+ /* @__PURE__ */ jsxRuntime.jsx("span", { children: t("filterGroup.filters") }),
23174
+ activeFilterCount > 0 && /* @__PURE__ */ jsxRuntime.jsx(exports.Badge, { variant: "primary", size: "sm", children: activeFilterCount })
23175
+ ] })
23176
+ }
23177
+ ),
23178
+ open && /* @__PURE__ */ jsxRuntime.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__ */ jsxRuntime.jsx(
23179
+ FilterGroupControls,
23180
+ {
23181
+ ...props,
23182
+ className: void 0,
23183
+ look: "toolbar",
23184
+ variant: "vertical",
23185
+ showIcon: false
23186
+ }
23187
+ ) })
23188
+ ] });
23189
+ };
23190
+ FilterGroupPopover.displayName = "FilterGroupPopover";
23191
+ exports.FilterGroup = (props) => props.look === "popover-trigger" ? /* @__PURE__ */ jsxRuntime.jsx(FilterGroupPopover, { ...props }) : /* @__PURE__ */ jsxRuntime.jsx(FilterGroupControls, { ...props });
23156
23192
  exports.FilterGroup.displayName = "FilterGroup";
23157
23193
  }
23158
23194
  });
@@ -28622,12 +28658,12 @@ var init_MapView = __esm({
28622
28658
  shadowSize: [41, 41]
28623
28659
  });
28624
28660
  L.Marker.prototype.options.icon = defaultIcon;
28625
- const { useEffect: useEffect65, useRef: useRef62, useCallback: useCallback105, useState: useState102 } = React74__namespace.default;
28661
+ const { useEffect: useEffect65, useRef: useRef63, useCallback: useCallback105, useState: useState102 } = React74__namespace.default;
28626
28662
  const { Typography: Typography2 } = await Promise.resolve().then(() => (init_Typography(), Typography_exports));
28627
28663
  const { useEventBus: useEventBus2 } = await Promise.resolve().then(() => (init_useEventBus(), useEventBus_exports));
28628
28664
  function MapUpdater({ centerLat, centerLng, zoom }) {
28629
28665
  const map = useMap();
28630
- const prevRef = useRef62({ centerLat, centerLng, zoom });
28666
+ const prevRef = useRef63({ centerLat, centerLng, zoom });
28631
28667
  useEffect65(() => {
28632
28668
  const prev = prevRef.current;
28633
28669
  if (prev.centerLat !== centerLat || prev.centerLng !== centerLng || prev.zoom !== zoom) {
@@ -29606,9 +29642,19 @@ function TableView({
29606
29642
  const inlineActionCount = hasActions ? maxInlineActions != null ? Math.min(itemActions.length, maxInlineActions) : itemActions.length : 0;
29607
29643
  const hasOverflowActions = hasActions && maxInlineActions != null && itemActions.length > maxInlineActions;
29608
29644
  const actionsTrack = hasActions ? `${inlineActionCount * 6 + (hasOverflowActions ? 3 : 0)}rem` : null;
29645
+ const colFloors = React74__namespace.default.useMemo(
29646
+ () => colDefs.map((col) => {
29647
+ const longest = data.reduce((widest, row) => {
29648
+ const cell = formatCell(asFieldValue(getNestedValue(row, col.field ?? col.key)), col.format);
29649
+ return Math.max(widest, cell.length);
29650
+ }, columnLabel(col).length);
29651
+ return Math.min(longest, MAX_MEASURED_COL_CH);
29652
+ }),
29653
+ [colDefs, data]
29654
+ );
29609
29655
  const gridTemplateColumns = [
29610
29656
  selectable ? "auto" : null,
29611
- ...colDefs.map((c) => c.width ?? "minmax(0, 1fr)"),
29657
+ ...colDefs.map((c, i) => c.width ?? `minmax(${colFloors[i]}ch, 1fr)`),
29612
29658
  actionsTrack
29613
29659
  ].filter(Boolean).join(" ");
29614
29660
  const header = /* @__PURE__ */ jsxRuntime.jsxs(
@@ -29775,7 +29821,7 @@ function TableView({
29775
29821
  }
29776
29822
  );
29777
29823
  }
29778
- var alignClass, weightClass, LOOKS;
29824
+ var MAX_MEASURED_COL_CH, alignClass, weightClass, LOOKS;
29779
29825
  var init_TableView = __esm({
29780
29826
  "components/core/molecules/TableView.tsx"() {
29781
29827
  "use client";
@@ -29793,6 +29839,7 @@ var init_TableView = __esm({
29793
29839
  init_Menu();
29794
29840
  init_useDataDnd();
29795
29841
  logger.createLogger("almadar:ui:table-view");
29842
+ MAX_MEASURED_COL_CH = 32;
29796
29843
  alignClass = {
29797
29844
  left: "justify-start text-left",
29798
29845
  center: "justify-center text-center",
@@ -37817,6 +37864,293 @@ var init_GraphCanvas = __esm({
37817
37864
  exports.GraphCanvas.displayName = "GraphCanvas";
37818
37865
  }
37819
37866
  });
37867
+ exports.ImportSourcePicker = void 0;
37868
+ var init_ImportSourcePicker = __esm({
37869
+ "components/core/molecules/import/ImportSourcePicker.tsx"() {
37870
+ "use client";
37871
+ init_Box();
37872
+ init_Icon();
37873
+ init_Typography();
37874
+ init_cn();
37875
+ exports.ImportSourcePicker = ({
37876
+ sources,
37877
+ onSelect,
37878
+ onFilesSelected,
37879
+ title,
37880
+ moreSources,
37881
+ className
37882
+ }) => {
37883
+ const fileInputRef = React74.useRef(null);
37884
+ const handlePick = (source) => {
37885
+ if (source.disabled) return;
37886
+ if (source.kind === "file") {
37887
+ const input = fileInputRef.current;
37888
+ if (!input) return;
37889
+ input.accept = source.accept ?? "";
37890
+ input.multiple = source.multiple ?? false;
37891
+ input.click();
37892
+ return;
37893
+ }
37894
+ onSelect?.(source.id);
37895
+ };
37896
+ const handleFiles = (event) => {
37897
+ const files = event.target.files ? Array.from(event.target.files) : [];
37898
+ event.target.value = "";
37899
+ if (files.length > 0) onFilesSelected?.(files);
37900
+ };
37901
+ return /* @__PURE__ */ jsxRuntime.jsxs(exports.Box, { className: cn("flex flex-col gap-2", className), children: [
37902
+ title ? /* @__PURE__ */ jsxRuntime.jsx(exports.Typography, { variant: "h4", children: title }) : null,
37903
+ sources.map((source) => /* @__PURE__ */ jsxRuntime.jsxs(
37904
+ exports.Box,
37905
+ {
37906
+ role: "button",
37907
+ tabIndex: source.disabled ? -1 : 0,
37908
+ "aria-disabled": source.disabled,
37909
+ onClick: () => handlePick(source),
37910
+ onKeyDown: (event) => {
37911
+ if (event.key === "Enter" || event.key === " ") {
37912
+ event.preventDefault();
37913
+ handlePick(source);
37914
+ }
37915
+ },
37916
+ className: cn(
37917
+ "flex items-center gap-3 rounded-md border border-border bg-card px-4 py-3 text-left",
37918
+ source.disabled ? "opacity-50 cursor-not-allowed" : "cursor-pointer hover:bg-accent hover:text-accent-foreground"
37919
+ ),
37920
+ children: [
37921
+ source.icon ? /* @__PURE__ */ jsxRuntime.jsx(exports.Icon, { icon: source.icon, size: "md" }) : null,
37922
+ /* @__PURE__ */ jsxRuntime.jsxs(exports.Box, { className: "flex flex-col", children: [
37923
+ /* @__PURE__ */ jsxRuntime.jsx(exports.Typography, { variant: "label", children: source.label }),
37924
+ source.description ? /* @__PURE__ */ jsxRuntime.jsx(exports.Typography, { variant: "caption", className: "text-muted-foreground", children: source.description }) : null
37925
+ ] })
37926
+ ]
37927
+ },
37928
+ source.id
37929
+ )),
37930
+ moreSources,
37931
+ /* @__PURE__ */ jsxRuntime.jsx(
37932
+ "input",
37933
+ {
37934
+ ref: fileInputRef,
37935
+ type: "file",
37936
+ className: "hidden",
37937
+ onChange: handleFiles,
37938
+ "data-testid": "import-source-file-input"
37939
+ }
37940
+ )
37941
+ ] });
37942
+ };
37943
+ }
37944
+ });
37945
+ function formatFieldValue(value) {
37946
+ if (value === null) return "\u2014";
37947
+ if (value instanceof Date) return value.toISOString();
37948
+ if (Array.isArray(value)) return value.map(formatFieldValue).join(", ");
37949
+ if (typeof value === "object") return JSON.stringify(value);
37950
+ return String(value);
37951
+ }
37952
+ function unitTitle(unit) {
37953
+ for (const key of TITLE_KEYS) {
37954
+ const value = unit.fields[key];
37955
+ if (typeof value === "string" && value.length > 0) return value;
37956
+ }
37957
+ return unit.ref;
37958
+ }
37959
+ function fieldSummary(unit) {
37960
+ return Object.entries(unit.fields).filter(([key]) => !TITLE_KEYS.includes(key)).map(([key, value]) => `${key}: ${formatFieldValue(value)}`).join(" \xB7 ");
37961
+ }
37962
+ var TITLE_KEYS; exports.ImportPreviewTree = void 0;
37963
+ var init_ImportPreviewTree = __esm({
37964
+ "components/core/molecules/import/ImportPreviewTree.tsx"() {
37965
+ "use client";
37966
+ init_Box();
37967
+ init_Badge();
37968
+ init_Button();
37969
+ init_Icon();
37970
+ init_Typography();
37971
+ init_cn();
37972
+ TITLE_KEYS = ["title", "name", "label"];
37973
+ exports.ImportPreviewTree = ({
37974
+ units,
37975
+ skipped = [],
37976
+ entityDisplay,
37977
+ onConfirm,
37978
+ onCancel,
37979
+ confirmLabel = "Confirm import",
37980
+ cancelLabel = "Cancel",
37981
+ indent = 16,
37982
+ className
37983
+ }) => {
37984
+ const groups = /* @__PURE__ */ new Map();
37985
+ for (const unit of units) {
37986
+ const group = groups.get(unit.targetEntity);
37987
+ if (group) group.push(unit);
37988
+ else groups.set(unit.targetEntity, [unit]);
37989
+ }
37990
+ const renderUnit = (unit, childrenByParent, depth) => {
37991
+ const summary = fieldSummary(unit);
37992
+ const children = childrenByParent.get(unit.ref) ?? [];
37993
+ return /* @__PURE__ */ jsxRuntime.jsxs(React74__namespace.default.Fragment, { children: [
37994
+ /* @__PURE__ */ jsxRuntime.jsxs(
37995
+ exports.Box,
37996
+ {
37997
+ className: "flex flex-col py-1",
37998
+ style: { paddingLeft: depth * indent },
37999
+ "data-testid": `import-preview-unit-${unit.ref}`,
38000
+ children: [
38001
+ /* @__PURE__ */ jsxRuntime.jsxs(exports.Box, { className: "flex items-center gap-2", children: [
38002
+ /* @__PURE__ */ jsxRuntime.jsx(exports.Icon, { icon: "file-text", size: "xs", className: "text-muted-foreground" }),
38003
+ /* @__PURE__ */ jsxRuntime.jsx(exports.Typography, { variant: "body2", children: unitTitle(unit) })
38004
+ ] }),
38005
+ summary ? /* @__PURE__ */ jsxRuntime.jsx(exports.Typography, { variant: "caption", className: "text-muted-foreground", children: summary }) : null
38006
+ ]
38007
+ }
38008
+ ),
38009
+ children.map((child) => renderUnit(child, childrenByParent, depth + 1))
38010
+ ] }, unit.ref);
38011
+ };
38012
+ return /* @__PURE__ */ jsxRuntime.jsxs(exports.Box, { className: cn("flex flex-col gap-4", className), children: [
38013
+ units.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx(exports.Typography, { variant: "body2", className: "text-muted-foreground", children: "No units staged." }) : null,
38014
+ Array.from(groups.entries()).map(([entity, groupUnits]) => {
38015
+ const refs = new Set(groupUnits.map((unit) => unit.ref));
38016
+ const childrenByParent = /* @__PURE__ */ new Map();
38017
+ const roots = [];
38018
+ for (const unit of groupUnits) {
38019
+ if (unit.parentRef && refs.has(unit.parentRef)) {
38020
+ const siblings = childrenByParent.get(unit.parentRef);
38021
+ if (siblings) siblings.push(unit);
38022
+ else childrenByParent.set(unit.parentRef, [unit]);
38023
+ } else {
38024
+ roots.push(unit);
38025
+ }
38026
+ }
38027
+ const label = entityDisplay[entity]?.plural ?? entity;
38028
+ return /* @__PURE__ */ jsxRuntime.jsxs(exports.Box, { border: true, className: "rounded-md border-border bg-card p-3", children: [
38029
+ /* @__PURE__ */ jsxRuntime.jsxs(exports.Box, { className: "flex items-center gap-2 pb-2", children: [
38030
+ /* @__PURE__ */ jsxRuntime.jsx(exports.Typography, { variant: "label", children: label }),
38031
+ /* @__PURE__ */ jsxRuntime.jsx(exports.Badge, { amount: groupUnits.length })
38032
+ ] }),
38033
+ roots.map((unit) => renderUnit(unit, childrenByParent, 0))
38034
+ ] }, entity);
38035
+ }),
38036
+ skipped.length > 0 ? /* @__PURE__ */ jsxRuntime.jsxs(exports.Box, { border: true, className: "rounded-md border-border bg-card p-3", children: [
38037
+ /* @__PURE__ */ jsxRuntime.jsxs(exports.Box, { className: "flex items-center gap-2 pb-2", children: [
38038
+ /* @__PURE__ */ jsxRuntime.jsx(exports.Typography, { variant: "label", children: "Skipped" }),
38039
+ /* @__PURE__ */ jsxRuntime.jsx(exports.Badge, { amount: skipped.length })
38040
+ ] }),
38041
+ skipped.map((element) => /* @__PURE__ */ jsxRuntime.jsxs(exports.Box, { className: "flex items-baseline gap-2 py-1", children: [
38042
+ /* @__PURE__ */ jsxRuntime.jsx(exports.Typography, { variant: "body2", children: element.ref }),
38043
+ /* @__PURE__ */ jsxRuntime.jsx(exports.Typography, { variant: "caption", className: "text-muted-foreground", children: element.reason })
38044
+ ] }, element.ref))
38045
+ ] }) : null,
38046
+ onConfirm || onCancel ? /* @__PURE__ */ jsxRuntime.jsxs(exports.Box, { className: "flex items-center justify-end gap-2", children: [
38047
+ onCancel ? /* @__PURE__ */ jsxRuntime.jsx(exports.Button, { variant: "default", label: cancelLabel, onClick: onCancel }) : null,
38048
+ onConfirm ? /* @__PURE__ */ jsxRuntime.jsx(exports.Button, { variant: "primary", label: confirmLabel, onClick: onConfirm }) : null
38049
+ ] }) : null
38050
+ ] });
38051
+ };
38052
+ }
38053
+ });
38054
+ var PIPELINE, DEFAULT_LABELS; exports.ImportProgress = void 0;
38055
+ var init_ImportProgress = __esm({
38056
+ "components/core/molecules/import/ImportProgress.tsx"() {
38057
+ "use client";
38058
+ init_Box();
38059
+ init_Badge();
38060
+ init_Icon();
38061
+ init_Typography();
38062
+ init_cn();
38063
+ PIPELINE = [
38064
+ "fetching",
38065
+ "mapping",
38066
+ "reviewing",
38067
+ "committing"
38068
+ ];
38069
+ DEFAULT_LABELS = {
38070
+ fetching: "Fetching",
38071
+ mapping: "Mapping",
38072
+ reviewing: "Reviewing",
38073
+ committing: "Committing",
38074
+ done: "Done",
38075
+ failed: "Failed"
38076
+ };
38077
+ exports.ImportProgress = ({
38078
+ step,
38079
+ counts,
38080
+ labels,
38081
+ className
38082
+ }) => {
38083
+ const label = (key) => labels?.[key] ?? DEFAULT_LABELS[key];
38084
+ const currentIndex = step === "done" || step === "failed" ? PIPELINE.length : PIPELINE.indexOf(step);
38085
+ return /* @__PURE__ */ jsxRuntime.jsxs(exports.Box, { className: cn("flex flex-col gap-3", className), children: [
38086
+ /* @__PURE__ */ jsxRuntime.jsxs(exports.Box, { className: "flex items-center gap-2", children: [
38087
+ PIPELINE.map((key, index) => {
38088
+ const isComplete = index < currentIndex;
38089
+ const isActive = index === currentIndex;
38090
+ return /* @__PURE__ */ jsxRuntime.jsxs(React74__namespace.default.Fragment, { children: [
38091
+ index > 0 ? /* @__PURE__ */ jsxRuntime.jsx(exports.Box, { className: "h-px w-4 bg-border" }) : null,
38092
+ /* @__PURE__ */ jsxRuntime.jsxs(exports.Box, { className: "flex items-center gap-1", "data-testid": `import-progress-step-${key}`, children: [
38093
+ /* @__PURE__ */ jsxRuntime.jsx(
38094
+ exports.Icon,
38095
+ {
38096
+ icon: isComplete ? "check" : isActive ? "loader" : "circle",
38097
+ size: "sm",
38098
+ className: cn(
38099
+ isComplete ? "text-success" : isActive ? "text-primary" : "text-muted-foreground"
38100
+ )
38101
+ }
38102
+ ),
38103
+ /* @__PURE__ */ jsxRuntime.jsx(
38104
+ exports.Typography,
38105
+ {
38106
+ variant: "caption",
38107
+ className: cn(isActive ? "text-foreground" : "text-muted-foreground"),
38108
+ children: label(key)
38109
+ }
38110
+ )
38111
+ ] })
38112
+ ] }, key);
38113
+ }),
38114
+ step === "done" || step === "failed" ? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
38115
+ /* @__PURE__ */ jsxRuntime.jsx(exports.Box, { className: "h-px w-4 bg-border" }),
38116
+ /* @__PURE__ */ jsxRuntime.jsxs(exports.Box, { className: "flex items-center gap-1", "data-testid": `import-progress-step-${step}`, children: [
38117
+ /* @__PURE__ */ jsxRuntime.jsx(
38118
+ exports.Icon,
38119
+ {
38120
+ icon: step === "done" ? "check" : "x",
38121
+ size: "sm",
38122
+ className: step === "done" ? "text-success" : "text-error"
38123
+ }
38124
+ ),
38125
+ /* @__PURE__ */ jsxRuntime.jsx(
38126
+ exports.Typography,
38127
+ {
38128
+ variant: "caption",
38129
+ className: step === "done" ? "text-success" : "text-error",
38130
+ children: label(step)
38131
+ }
38132
+ )
38133
+ ] })
38134
+ ] }) : null
38135
+ ] }),
38136
+ counts ? /* @__PURE__ */ jsxRuntime.jsxs(exports.Box, { className: "flex items-center gap-2", children: [
38137
+ counts.staged !== void 0 ? /* @__PURE__ */ jsxRuntime.jsx(exports.Badge, { label: `Staged ${counts.staged}` }) : null,
38138
+ counts.committed !== void 0 ? /* @__PURE__ */ jsxRuntime.jsx(exports.Badge, { variant: "success", label: `Committed ${counts.committed}` }) : null,
38139
+ counts.failed !== void 0 ? /* @__PURE__ */ jsxRuntime.jsx(exports.Badge, { variant: "danger", label: `Failed ${counts.failed}` }) : null
38140
+ ] }) : null
38141
+ ] });
38142
+ };
38143
+ }
38144
+ });
38145
+
38146
+ // components/core/molecules/import/index.ts
38147
+ var init_import = __esm({
38148
+ "components/core/molecules/import/index.ts"() {
38149
+ init_ImportSourcePicker();
38150
+ init_ImportPreviewTree();
38151
+ init_ImportProgress();
38152
+ }
38153
+ });
37820
38154
  exports.ReflectionBlock = void 0;
37821
38155
  var init_ReflectionBlock = __esm({
37822
38156
  "components/core/molecules/ReflectionBlock.tsx"() {
@@ -38103,6 +38437,7 @@ var init_molecules2 = __esm({
38103
38437
  init_SignaturePad();
38104
38438
  init_DocumentViewer();
38105
38439
  init_GraphCanvas();
38440
+ init_import();
38106
38441
  init_ActivationBlock();
38107
38442
  init_ReflectionBlock();
38108
38443
  init_ConnectionBlock();
@@ -38589,7 +38924,7 @@ function getBadgeVariant(fieldName, value) {
38589
38924
  function formatFieldLabel(fieldName) {
38590
38925
  return fieldName.replace(/([A-Z])/g, " $1").replace(/^./, (str2) => str2.toUpperCase());
38591
38926
  }
38592
- function formatFieldValue(value, fieldName) {
38927
+ function formatFieldValue2(value, fieldName) {
38593
38928
  if (typeof value === "number") {
38594
38929
  if (fieldName.toLowerCase().includes("progress") || fieldName.toLowerCase().includes("percent")) {
38595
38930
  return `${value}%`;
@@ -38684,7 +39019,7 @@ function renderRichFieldValue(value, fieldName, fieldType) {
38684
39019
  return str2;
38685
39020
  }
38686
39021
  default:
38687
- return formatFieldValue(value, fieldName);
39022
+ return formatFieldValue2(value, fieldName);
38688
39023
  }
38689
39024
  }
38690
39025
  function normalizeFieldDefs(fields) {
@@ -38795,7 +39130,7 @@ var init_DetailPanel = __esm({
38795
39130
  const value = getNestedValue(normalizedData, field);
38796
39131
  return {
38797
39132
  label: labelFor(field),
38798
- value: formatFieldValue(value, field),
39133
+ value: formatFieldValue2(value, field),
38799
39134
  icon: getFieldIcon(field)
38800
39135
  };
38801
39136
  }
@@ -44807,6 +45142,9 @@ var init_component_registry_generated = __esm({
44807
45142
  init_HeroOrganism();
44808
45143
  init_HeroSection();
44809
45144
  init_Icon();
45145
+ init_ImportPreviewTree();
45146
+ init_ImportProgress();
45147
+ init_ImportSourcePicker();
44810
45148
  init_InfiniteScrollSentinel();
44811
45149
  init_Input();
44812
45150
  init_InputGroup();
@@ -45070,6 +45408,9 @@ var init_component_registry_generated = __esm({
45070
45408
  "HeroOrganism": exports.HeroOrganism,
45071
45409
  "HeroSection": exports.HeroSection,
45072
45410
  "Icon": exports.Icon,
45411
+ "ImportPreviewTree": exports.ImportPreviewTree,
45412
+ "ImportProgress": exports.ImportProgress,
45413
+ "ImportSourcePicker": exports.ImportSourcePicker,
45073
45414
  "InfiniteScrollSentinel": exports.InfiniteScrollSentinel,
45074
45415
  "Input": exports.Input,
45075
45416
  "InputGroup": exports.InputGroup,