@rebasepro/cms 0.21.1 → 0.21.2-canary.g1ea48be

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.
Files changed (28) hide show
  1. package/dist/{CollectionEditorDialog-DPLimWfL.js → CollectionEditorDialog-B1mG1cfx.js} +3 -3
  2. package/dist/{CollectionEditorDialog-DPLimWfL.js.map → CollectionEditorDialog-B1mG1cfx.js.map} +1 -1
  3. package/dist/{PropertyEditView-D85vuYZu.js → PropertyEditView-gKNUHxLY.js} +2 -2
  4. package/dist/{PropertyEditView-D85vuYZu.js.map → PropertyEditView-gKNUHxLY.js.map} +1 -1
  5. package/dist/{RouterCollectionsStudioView-C1BseTGZ.js → RouterCollectionsStudioView-qgDWC6E2.js} +4 -4
  6. package/dist/{RouterCollectionsStudioView-C1BseTGZ.js.map → RouterCollectionsStudioView-qgDWC6E2.js.map} +1 -1
  7. package/dist/collection_editor_ui.js +4 -4
  8. package/dist/components/EntityIdentityBar.d.ts +11 -0
  9. package/dist/components/PropertyKeyHint.d.ts +25 -0
  10. package/dist/components/index.d.ts +1 -1
  11. package/dist/{export-CrKQwyBM.js → export-DIyk1720.js} +3 -3
  12. package/dist/export-DIyk1720.js.map +1 -0
  13. package/dist/form/components/LabelWithIcon.d.ts +7 -0
  14. package/dist/form/components/index.d.ts +0 -1
  15. package/dist/{history-DH4h_T1U.js → history-CrZEzQ5b.js} +2 -2
  16. package/dist/{history-DH4h_T1U.js.map → history-CrZEzQ5b.js.map} +1 -1
  17. package/dist/{import-Ct2FFEEj.js → import-ByaJMZuT.js} +2 -2
  18. package/dist/{import-Ct2FFEEj.js.map → import-ByaJMZuT.js.map} +1 -1
  19. package/dist/index.d.ts +1 -1
  20. package/dist/index.js +8 -8
  21. package/dist/index.js.map +1 -1
  22. package/dist/{util-jUWinb7D.js → util-qfCPxJzB.js} +470 -424
  23. package/dist/util-qfCPxJzB.js.map +1 -0
  24. package/package.json +9 -9
  25. package/dist/components/PropertyIdCopyTooltip.d.ts +0 -8
  26. package/dist/export-CrKQwyBM.js.map +0 -1
  27. package/dist/form/components/LabelWithIconAndTooltip.d.ts +0 -15
  28. package/dist/util-jUWinb7D.js.map +0 -1
@@ -156,41 +156,53 @@ function getDefaultPropertiesOrder(collection) {
156
156
  return [...Object.keys(collection.properties), ...(collection.additionalFields ?? []).map((field) => field.key)];
157
157
  }
158
158
  //#endregion
159
- //#region src/components/PropertyIdCopyTooltip.tsx
160
- function PropertyIdCopyTooltip({ propertyKey, className, children }) {
161
- return /* @__PURE__ */ jsx(Tooltip, {
162
- title: /* @__PURE__ */ jsx(PropertyIdCopyTooltipContent, { propertyKey }),
163
- delayDuration: 800,
164
- side: "top",
165
- align: "start",
166
- sideOffset: 8,
167
- className,
168
- children
169
- });
170
- }
171
- function PropertyIdCopyTooltipContent({ propertyKey }) {
159
+ //#region src/components/PropertyKeyHint.tsx
160
+ /**
161
+ * A property's key, shown beside its label while the label is hovered, and
162
+ * copied when clicked.
163
+ *
164
+ * Inline, in the label row's own empty space, rather than a tooltip. The tooltip
165
+ * this replaces wrapped the field's control as well as its label, so it opened
166
+ * the moment a field took focus and sat on top of the label of the very field
167
+ * being filled in. Closing again on blur, it was also what threw Tab out of the
168
+ * dialog (see `useRestoreInterruptedFocus` in `@rebasepro/ui`). A key a
169
+ * developer copies now and then is not worth a layer over the form.
170
+ *
171
+ * Revealed by hovering the nearest `group/label` ancestor, after a pause, so a
172
+ * pointer crossing the form does not flicker keys on and off; hidden again at
173
+ * once. Out of the tab order: a stop per field would double the keystrokes it
174
+ * takes to get through a form, for something only the pointer needs.
175
+ *
176
+ * Gives up its width before the label does (`shrink-[999]`), so a long field
177
+ * name in a narrow column is never truncated to make room for a key that is not
178
+ * even showing.
179
+ */
180
+ function PropertyKeyHint({ propertyKey, className }) {
181
+ const { t } = useTranslation();
172
182
  const [copied, setCopied] = useState(false);
173
- return /* @__PURE__ */ jsxs("div", {
174
- className: "flex flex-row gap-2 items-center justify-center text-on-surface",
175
- children: [/* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx(Typography, {
176
- variant: "caption",
177
- className: "min-w-20 text-on-surface-variant opacity-80",
178
- color: "inherit",
179
- children: copied ? "Copied" : "Property ID"
180
- }), /* @__PURE__ */ jsx(Typography, {
181
- variant: "caption",
182
- className: "text-on-surface",
183
- children: /* @__PURE__ */ jsx("code", { children: propertyKey })
184
- })] }), /* @__PURE__ */ jsx(IconButton, {
185
- size: "small",
186
- children: /* @__PURE__ */ jsx(CopyIcon, {
187
- className: "text-on-surface",
188
- onClick: useCallback(() => {
189
- navigator.clipboard.writeText(propertyKey);
190
- setCopied(true);
191
- setTimeout(() => setCopied(false), 2e3);
192
- }, [propertyKey])
193
- })
183
+ const copy = (event) => {
184
+ event.preventDefault();
185
+ event.stopPropagation();
186
+ navigator.clipboard?.writeText(propertyKey).then(() => {
187
+ setCopied(true);
188
+ setTimeout(() => setCopied(false), 1600);
189
+ }, () => void 0);
190
+ };
191
+ return /* @__PURE__ */ jsxs("button", {
192
+ type: "button",
193
+ tabIndex: -1,
194
+ onClick: copy,
195
+ "aria-label": `${t("copy")} ${propertyKey}`,
196
+ className: cls("inline-flex items-center gap-1 min-w-0 shrink-[999] px-1 -my-0.5 rounded-md", "font-mono text-[11px] font-normal leading-tight", "text-text-disabled dark:text-text-disabled-dark", "hover:text-text-secondary dark:hover:text-text-secondary-dark hover:bg-surface-hover", "opacity-0 transition-opacity duration-150 group-hover/label:opacity-100 group-hover/label:delay-500", className),
197
+ children: [/* @__PURE__ */ jsx("span", {
198
+ className: "truncate",
199
+ children: propertyKey
200
+ }), copied ? /* @__PURE__ */ jsx(CheckIcon, {
201
+ size: 11,
202
+ className: "shrink-0"
203
+ }) : /* @__PURE__ */ jsx(CopyIcon, {
204
+ size: 11,
205
+ className: "shrink-0"
194
206
  })]
195
207
  });
196
208
  }
@@ -273,25 +285,23 @@ function FieldBlock({ propertyKey, property, showLabel, mode = "edit", label, ic
273
285
  id: `form_field_${propertyKey}`,
274
286
  className: "relative flex flex-col min-w-0",
275
287
  children: [
276
- showLabel && /* @__PURE__ */ jsx(PropertyIdCopyTooltip, {
277
- propertyKey,
278
- children: /* @__PURE__ */ jsxs("div", {
279
- className: cls("flex items-center gap-1.5 font-medium leading-tight mb-1.5", "text-[13px] text-text-primary dark:text-text-primary-dark"),
280
- children: [
281
- (property || icon) && /* @__PURE__ */ jsx("span", {
282
- className: "shrink-0 text-text-disabled dark:text-text-disabled-dark",
283
- children: property ? getIconForProperty(property, 14) : icon
284
- }),
285
- /* @__PURE__ */ jsx("span", {
286
- className: "truncate",
287
- children: property?.name ?? label ?? propertyKey
288
- }),
289
- required && /* @__PURE__ */ jsx("span", {
290
- className: "text-red-500 dark:text-red-500 -ml-1",
291
- children: "*"
292
- })
293
- ]
294
- })
288
+ showLabel && /* @__PURE__ */ jsxs("div", {
289
+ className: cls("group/label flex items-center gap-1.5 min-w-0 font-medium leading-tight mb-1.5", "text-[13px] text-text-primary dark:text-text-primary-dark"),
290
+ children: [
291
+ (property || icon) && /* @__PURE__ */ jsx("span", {
292
+ className: "shrink-0 text-text-disabled dark:text-text-disabled-dark",
293
+ children: property ? getIconForProperty(property, 14) : icon
294
+ }),
295
+ /* @__PURE__ */ jsx("span", {
296
+ className: "truncate",
297
+ children: property?.name ?? label ?? propertyKey
298
+ }),
299
+ required && /* @__PURE__ */ jsx("span", {
300
+ className: "text-red-500 dark:text-red-500 -ml-1",
301
+ children: "*"
302
+ }),
303
+ property && /* @__PURE__ */ jsx(PropertyKeyHint, { propertyKey })
304
+ ]
295
305
  }),
296
306
  /* @__PURE__ */ jsx("div", {
297
307
  className: "min-w-0",
@@ -3484,32 +3494,23 @@ function FieldHelperText({ error, showError, property, includeDescription = true
3484
3494
  * Render the label of with an icon and the title of a property
3485
3495
  * @group Form custom fields
3486
3496
  */
3487
- var LabelWithIcon = forwardRef(({ icon, title, small, className, required, labelId }, ref) => {
3497
+ var LabelWithIcon = forwardRef(({ icon, title, small, className, required, labelId, propertyKey }, ref) => {
3488
3498
  return /* @__PURE__ */ jsxs("div", {
3489
3499
  ref,
3490
- className: cls("align-middle inline-flex items-center my-0.5", small ? "gap-1" : "gap-2", className),
3491
- children: [icon, /* @__PURE__ */ jsx("span", {
3492
- id: labelId,
3493
- className: `text-start font-medium text-${small ? "base" : "sm"} origin-top-left transform ${small ? "translate-x-2 scale-75" : ""}`,
3494
- children: (title ?? "") + (required ? " *" : "")
3495
- })]
3500
+ className: cls("group/label align-middle inline-flex items-center min-w-0 my-0.5", small ? "gap-1" : "gap-2", className),
3501
+ children: [
3502
+ icon,
3503
+ /* @__PURE__ */ jsx("span", {
3504
+ id: labelId,
3505
+ className: `text-start font-medium text-${small ? "base" : "sm"} origin-top-left transform ${small ? "translate-x-2 scale-75" : ""}`,
3506
+ children: (title ?? "") + (required ? " *" : "")
3507
+ }),
3508
+ propertyKey && /* @__PURE__ */ jsx(PropertyKeyHint, { propertyKey })
3509
+ ]
3496
3510
  });
3497
3511
  });
3498
3512
  LabelWithIcon.displayName = "LabelWithIcon";
3499
3513
  //#endregion
3500
- //#region src/form/components/LabelWithIconAndTooltip.tsx
3501
- /**
3502
- * Render the label of with an icon and the title of a property
3503
- * @group Form custom fields
3504
- */
3505
- function LabelWithIconAndTooltip({ propertyKey, className, ...props }) {
3506
- return /* @__PURE__ */ jsx(PropertyIdCopyTooltip, {
3507
- propertyKey,
3508
- className,
3509
- children: /* @__PURE__ */ jsx(LabelWithIcon, { ...props })
3510
- });
3511
- }
3512
- //#endregion
3513
3514
  //#region src/form/field_bindings/ReadOnlyFieldBinding.tsx
3514
3515
  /**
3515
3516
  *
@@ -3522,7 +3523,7 @@ function LabelWithIconAndTooltip({ propertyKey, className, ...props }) {
3522
3523
  function ReadOnlyFieldBinding({ propertyKey, value, error, showError, minimalistView, property, includeDescription, hideLabel, context, size = "large" }) {
3523
3524
  const skipCardWrapper = property.type === "relation" || property.type === "reference";
3524
3525
  return /* @__PURE__ */ jsxs(Fragment, { children: [
3525
- !minimalistView && !hideLabel && /* @__PURE__ */ jsx(LabelWithIconAndTooltip, {
3526
+ !minimalistView && !hideLabel && /* @__PURE__ */ jsx(LabelWithIcon, {
3526
3527
  propertyKey,
3527
3528
  icon: getIconForProperty(property, "small"),
3528
3529
  required: property.validation?.required,
@@ -3599,7 +3600,7 @@ function ArrayCustomShapedFieldBinding({ propertyKey, value, error, showError, i
3599
3600
  value,
3600
3601
  setValue
3601
3602
  });
3602
- const title = /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx(LabelWithIconAndTooltip, {
3603
+ const title = /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx(LabelWithIcon, {
3603
3604
  propertyKey,
3604
3605
  icon: getIconForProperty(property, "small"),
3605
3606
  required: property.validation?.required,
@@ -8902,6 +8903,21 @@ function loadXlsxReader() {
8902
8903
  return xlsxReader;
8903
8904
  }
8904
8905
  /**
8906
+ * Put a date the reader left a millisecond short back on its second.
8907
+ *
8908
+ * `read-excel-file` turns Excel's date serials (fractional days) into
8909
+ * milliseconds with `Math.floor`, and the fraction is rarely exact in floating
8910
+ * point: a time of 12:30:00 arrives as 12:29:59.999, and a field that shows
8911
+ * minutes displays 12:29. A date within a millisecond of a whole second is put
8912
+ * back on it; a genuine sub-second value is left alone.
8913
+ */
8914
+ function snapToSecond(cell) {
8915
+ if (!(cell instanceof Date)) return cell;
8916
+ const time = cell.getTime();
8917
+ const second = Math.round(time / 1e3) * 1e3;
8918
+ return Math.abs(time - second) <= 1 ? new Date(second) : cell;
8919
+ }
8920
+ /**
8905
8921
  * Whether this file is delimited text rather than a workbook.
8906
8922
  *
8907
8923
  * Browsers report `text/csv`, `application/csv` or nothing at all for the same
@@ -8999,7 +9015,7 @@ function convertFileToJson(file) {
8999
9015
  row.forEach((cell, index) => {
9000
9016
  if (cell === null || cell === void 0) return;
9001
9017
  const header = headers.byColumn.get(index);
9002
- if (header && !isPrototypePollutingKey(header)) obj[header] = cell;
9018
+ if (header && !isPrototypePollutingKey(header)) obj[header] = snapToSecond(cell);
9003
9019
  });
9004
9020
  parsedData.push(obj);
9005
9021
  }
@@ -9895,8 +9911,8 @@ function EditorCollectionAction({ path, parentCollectionSlugs, parentEntityIds,
9895
9911
  }
9896
9912
  //#endregion
9897
9913
  //#region src/components/CollectionViewBinding/CollectionViewActions.tsx
9898
- var ImportCollectionAction = lazyChunk(() => import("./import-Ct2FFEEj.js").then((n) => n.t).then((m) => ({ default: m.ImportCollectionAction })));
9899
- var ExportCollectionAction = lazyChunk(() => import("./export-CrKQwyBM.js").then((n) => n.t).then((m) => ({ default: m.ExportCollectionAction })));
9914
+ var ImportCollectionAction = lazyChunk(() => import("./import-ByaJMZuT.js").then((n) => n.t).then((m) => ({ default: m.ImportCollectionAction })));
9915
+ var ExportCollectionAction = lazyChunk(() => import("./export-DIyk1720.js").then((n) => n.t).then((m) => ({ default: m.ExportCollectionAction })));
9900
9916
  function CollectionViewActions({ collection, relativePath, parentCollectionSlugs, parentEntityIds, onNewClick, onAddExistingClick, onMultipleDeleteClick, selectionEnabled, path, selectionController, tableController, collectionEntitiesCount, compact, children, openNewDocument }) {
9901
9917
  const context = useAdminContext();
9902
9918
  const { canCreate, canDelete } = usePermissions();
@@ -11983,12 +11999,7 @@ function EntityViewBinding({ entity, collection, className, asPage = false, open
11983
11999
  */
11984
12000
  function EntityIdentityBar({ collection, collectionUrl, title, entityId, status, dirty, saving, onSave, onDiscard, saveDisabled, hasErrors, onSaveAndClose, saveAndClosePlacement = "button", onClose, onBack, onInspect, onViewHistory, externalLink, recordActions, pluginActions, trailing, leading }) {
11985
12001
  const { t } = useTranslation();
11986
- const saveLabel = status === "existing" ? t("save") : status === "copy" ? t("create_copy") : t("create");
11987
- const closeLabel = status === "existing" ? t("save_and_close") : status === "copy" ? t("create_copy_and_close") : t("create_and_close");
11988
12002
  const hasMenu = Boolean(recordActions) || Boolean(onInspect) || Boolean(onViewHistory) || Boolean(externalLink);
11989
- const saveAndCloseButton = Boolean(onSaveAndClose) && saveAndClosePlacement === "button";
11990
- const saveAndCloseMenu = Boolean(onSaveAndClose) && saveAndClosePlacement === "menu";
11991
- const saveTooltip = hasErrors ? t("fix_errors_before_saving") ?? "Fix highlighted errors before saving" : void 0;
11992
12003
  return /* @__PURE__ */ jsxs("div", {
11993
12004
  className: cls("h-[52px] shrink-0 flex items-center gap-2 pl-1.5 pr-2", "bg-surface-sheet"),
11994
12005
  children: [
@@ -12022,59 +12033,17 @@ function EntityIdentityBar({ collection, collectionUrl, title, entityId, status,
12022
12033
  }),
12023
12034
  entityId !== void 0 && /* @__PURE__ */ jsx(IdChip, { value: String(entityId) }),
12024
12035
  /* @__PURE__ */ jsx("div", { className: "flex-1" }),
12025
- onSave && /* @__PURE__ */ jsx(SaveState, {
12036
+ pluginActions,
12037
+ /* @__PURE__ */ jsx(EntitySaveActions, {
12038
+ status,
12026
12039
  dirty,
12027
12040
  saving,
12028
- status,
12029
- t
12030
- }),
12031
- pluginActions,
12032
- onDiscard && dirty && !saving && /* @__PURE__ */ jsx(Button, {
12033
- variant: "text",
12034
- size: "small",
12035
- onClick: onDiscard,
12036
- children: status === "existing" ? t("discard") : t("clear")
12037
- }),
12038
- onSave && /* @__PURE__ */ jsxs("div", {
12039
- className: "flex items-stretch rounded-lg overflow-hidden",
12040
- children: [/* @__PURE__ */ jsx(Tooltip, {
12041
- title: saveTooltip,
12042
- children: /* @__PURE__ */ jsx(LoadingButton, {
12043
- variant: saveAndCloseButton ? "text" : "filled",
12044
- color: "primary",
12045
- size: "small",
12046
- loading: saving && !saveAndCloseButton,
12047
- disabled: saveDisabled,
12048
- onClick: onSave,
12049
- className: saveAndCloseMenu ? "rounded-none" : void 0,
12050
- children: saveLabel
12051
- })
12052
- }), saveAndCloseMenu && /* @__PURE__ */ jsx(Fragment, { children: /* @__PURE__ */ jsx(Menu, {
12053
- align: "end",
12054
- trigger: /* @__PURE__ */ jsx(Button, {
12055
- variant: "filled",
12056
- color: "primary",
12057
- size: "small",
12058
- disabled: saveDisabled,
12059
- "aria-label": closeLabel,
12060
- style: { borderLeftColor: "color-mix(in oklab, currentColor 15%, transparent)" },
12061
- className: "rounded-none px-1.5",
12062
- children: /* @__PURE__ */ jsx(ChevronDownIcon, { size: iconSize.smallest })
12063
- }),
12064
- children: /* @__PURE__ */ jsxs(MenuItem, {
12065
- onClick: onSaveAndClose,
12066
- children: [/* @__PURE__ */ jsx(CheckIcon, { size: iconSize.smallest }), closeLabel]
12067
- })
12068
- }) })]
12069
- }),
12070
- saveAndCloseButton && /* @__PURE__ */ jsx(LoadingButton, {
12071
- variant: "filled",
12072
- color: "primary",
12073
- size: "small",
12074
- loading: saving,
12075
- disabled: saveDisabled,
12076
- onClick: onSaveAndClose,
12077
- children: closeLabel
12041
+ onSave,
12042
+ onDiscard,
12043
+ saveDisabled,
12044
+ hasErrors,
12045
+ onSaveAndClose,
12046
+ saveAndClosePlacement
12078
12047
  }),
12079
12048
  hasMenu && /* @__PURE__ */ jsxs(Menu, {
12080
12049
  align: "end",
@@ -12116,6 +12085,78 @@ function EntityIdentityBar({ collection, collectionUrl, title, entityId, status,
12116
12085
  });
12117
12086
  }
12118
12087
  /**
12088
+ * Save, "save and close", Discard, and the words saying where the edit stands.
12089
+ *
12090
+ * Its own component because it has two homes. On a page and in the side panel
12091
+ * it sits in the identity bar, where it stays in view while the form scrolls. In
12092
+ * the dialog it sits in a footer under the form: a dialog is read top to bottom
12093
+ * and finished at the bottom, where every other dialog in the app keeps its
12094
+ * buttons, and the bar at its top is left to say what the record is.
12095
+ */
12096
+ function EntitySaveActions({ status, dirty, saving, onSave, onDiscard, saveDisabled, hasErrors, onSaveAndClose, saveAndClosePlacement = "button" }) {
12097
+ const { t } = useTranslation();
12098
+ const saveLabel = status === "existing" ? t("save") : status === "copy" ? t("create_copy") : t("create");
12099
+ const closeLabel = status === "existing" ? t("save_and_close") : status === "copy" ? t("create_copy_and_close") : t("create_and_close");
12100
+ const saveAndCloseButton = Boolean(onSaveAndClose) && saveAndClosePlacement === "button";
12101
+ const saveAndCloseMenu = Boolean(onSaveAndClose) && saveAndClosePlacement === "menu";
12102
+ const saveTooltip = hasErrors ? t("fix_errors_before_saving") ?? "Fix highlighted errors before saving" : void 0;
12103
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
12104
+ onSave && /* @__PURE__ */ jsx(SaveState, {
12105
+ dirty,
12106
+ saving,
12107
+ status,
12108
+ t
12109
+ }),
12110
+ onDiscard && dirty && !saving && /* @__PURE__ */ jsx(Button, {
12111
+ variant: "text",
12112
+ size: "small",
12113
+ onClick: onDiscard,
12114
+ children: status === "existing" ? t("discard") : t("clear")
12115
+ }),
12116
+ onSave && /* @__PURE__ */ jsxs("div", {
12117
+ className: "flex items-stretch rounded-lg overflow-hidden",
12118
+ children: [/* @__PURE__ */ jsx(Tooltip, {
12119
+ title: saveTooltip,
12120
+ children: /* @__PURE__ */ jsx(LoadingButton, {
12121
+ variant: saveAndCloseButton ? "text" : "filled",
12122
+ color: "primary",
12123
+ size: "small",
12124
+ loading: saving && !saveAndCloseButton,
12125
+ disabled: saveDisabled,
12126
+ onClick: onSave,
12127
+ className: saveAndCloseMenu ? "rounded-none" : void 0,
12128
+ children: saveLabel
12129
+ })
12130
+ }), saveAndCloseMenu && /* @__PURE__ */ jsx(Fragment, { children: /* @__PURE__ */ jsx(Menu, {
12131
+ align: "end",
12132
+ trigger: /* @__PURE__ */ jsx(Button, {
12133
+ variant: "filled",
12134
+ color: "primary",
12135
+ size: "small",
12136
+ disabled: saveDisabled,
12137
+ "aria-label": closeLabel,
12138
+ style: { borderLeftColor: "color-mix(in oklab, currentColor 15%, transparent)" },
12139
+ className: "rounded-none px-1.5",
12140
+ children: /* @__PURE__ */ jsx(ChevronDownIcon, { size: iconSize.smallest })
12141
+ }),
12142
+ children: /* @__PURE__ */ jsxs(MenuItem, {
12143
+ onClick: onSaveAndClose,
12144
+ children: [/* @__PURE__ */ jsx(CheckIcon, { size: iconSize.smallest }), closeLabel]
12145
+ })
12146
+ }) })]
12147
+ }),
12148
+ saveAndCloseButton && /* @__PURE__ */ jsx(LoadingButton, {
12149
+ variant: "filled",
12150
+ color: "primary",
12151
+ size: "small",
12152
+ loading: saving,
12153
+ disabled: saveDisabled,
12154
+ onClick: onSaveAndClose,
12155
+ children: closeLabel
12156
+ })
12157
+ ] });
12158
+ }
12159
+ /**
12119
12160
  * The words the unlabelled floating circle never said.
12120
12161
  *
12121
12162
  * That indicator was a ✓ / pencil / spinner chip stuck to the top-right of the
@@ -12232,7 +12273,7 @@ function SplitListShowButton({ onClick }) {
12232
12273
  }
12233
12274
  //#endregion
12234
12275
  //#region src/components/EntityInspector.tsx
12235
- var EntityHistoryView = lazyChunk(() => import("./history-DH4h_T1U.js").then((m) => ({ default: m.EntityHistoryView })));
12276
+ var EntityHistoryView = lazyChunk(() => import("./history-CrZEzQ5b.js").then((m) => ({ default: m.EntityHistoryView })));
12236
12277
  /**
12237
12278
  * The JSON tab pulls `prism-react-renderer` — 85 kB, and it was EAGER.
12238
12279
  *
@@ -18185,6 +18226,34 @@ function EditViewBindingInner({ path, entityId, selectedTab: selectedTabProp, co
18185
18226
  })
18186
18227
  }, `entity_detail_collection_tab_${view.name}`);
18187
18228
  });
18229
+ const onSave = formActionsContext ? () => {
18230
+ sideDialogContext.setPendingClose?.(false);
18231
+ pendingCloseRef.current = false;
18232
+ formActionsContext.submit();
18233
+ } : void 0;
18234
+ const onSaveAndClose = formActionsContext && canCloseAfterSave ? () => {
18235
+ if (layout === "split") {
18236
+ pendingCloseRef.current = true;
18237
+ Promise.resolve(formActionsContext.submit()).finally(() => {
18238
+ pendingCloseRef.current = false;
18239
+ });
18240
+ return;
18241
+ }
18242
+ sideDialogContext.setPendingClose?.(true);
18243
+ Promise.resolve(formActionsContext.submit()).finally(() => sideDialogContext.setPendingClose?.(false));
18244
+ } : void 0;
18245
+ const onDiscard = formActionsContext ? () => discard(formActionsContext.formex, status) : void 0;
18246
+ /**
18247
+ * The dialog keeps Save at its foot, not in the bar.
18248
+ *
18249
+ * A dialog is filled in top to bottom and finished at the bottom, which is
18250
+ * where every other dialog in the app puts its buttons; up in the bar's
18251
+ * right-hand corner, Create was the one thing on screen the eye had to
18252
+ * travel back up to reach. The bar keeps what the record is and the ways
18253
+ * out of it. The side panel and the pages keep Save in the bar, where it
18254
+ * stays in view while a long form scrolls.
18255
+ */
18256
+ const actionsInFooter = layout === "dialog";
18188
18257
  const fullScreenButton = !barActions && (layout === "side_panel" || layout === "dialog") && entityId ? /* @__PURE__ */ jsx(Tooltip, {
18189
18258
  title: "Open full screen",
18190
18259
  children: /* @__PURE__ */ jsx(IconButton, {
@@ -18212,25 +18281,11 @@ function EditViewBindingInner({ path, entityId, selectedTab: selectedTabProp, co
18212
18281
  hasErrors: hasFormErrors,
18213
18282
  saveDisabled: !canEdit || saveDisabled,
18214
18283
  onBack: layout === "full_screen" && !onShowList ? () => navigate(withListState(urlController.buildUrlCollectionPath(path))) : void 0,
18215
- onSave: formActionsContext ? () => {
18216
- sideDialogContext.setPendingClose?.(false);
18217
- pendingCloseRef.current = false;
18218
- formActionsContext.submit();
18219
- } : void 0,
18220
- onSaveAndClose: formActionsContext && canCloseAfterSave ? () => {
18221
- if (layout === "split") {
18222
- pendingCloseRef.current = true;
18223
- Promise.resolve(formActionsContext.submit()).finally(() => {
18224
- pendingCloseRef.current = false;
18225
- });
18226
- return;
18227
- }
18228
- sideDialogContext.setPendingClose?.(true);
18229
- Promise.resolve(formActionsContext.submit()).finally(() => sideDialogContext.setPendingClose?.(false));
18230
- } : void 0,
18284
+ onSave: actionsInFooter ? void 0 : onSave,
18285
+ onSaveAndClose: actionsInFooter ? void 0 : onSaveAndClose,
18231
18286
  saveAndClosePlacement: layout === "split" ? "menu" : "button",
18232
18287
  onClose: onCloseRequest,
18233
- onDiscard: formActionsContext ? () => discard(formActionsContext.formex, status) : void 0,
18288
+ onDiscard: actionsInFooter ? void 0 : onDiscard,
18234
18289
  onInspect: includeJsonView ? () => setInspectorTab("json") : void 0,
18235
18290
  onViewHistory: includeHistoryView ? () => setInspectorTab("history") : void 0,
18236
18291
  externalLink: usedEntity ? customizationController?.entityLinkBuilder?.({ entity: usedEntity }) : void 0,
@@ -18302,6 +18357,19 @@ function EditViewBindingInner({ path, entityId, selectedTab: selectedTabProp, co
18302
18357
  refreshToken: savedCount,
18303
18358
  includeHistory: includeHistoryView
18304
18359
  })]
18360
+ }),
18361
+ actionsInFooter && onSave && /* @__PURE__ */ jsx(DialogActions, {
18362
+ translucent: false,
18363
+ children: /* @__PURE__ */ jsx(EntitySaveActions, {
18364
+ status,
18365
+ dirty: Boolean(formContext?.formex?.dirty),
18366
+ saving: Boolean(formContext?.isSaving),
18367
+ hasErrors: hasFormErrors,
18368
+ saveDisabled: !canEdit || saveDisabled,
18369
+ onSave,
18370
+ onSaveAndClose,
18371
+ onDiscard
18372
+ })
18305
18373
  })
18306
18374
  ]
18307
18375
  });
@@ -20394,7 +20462,7 @@ function ArrayOfReferencesFieldBinding({ propertyKey, value, error, showError, d
20394
20462
  ofProperty.admin?.previewProperties,
20395
20463
  value
20396
20464
  ]);
20397
- const title = /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx(LabelWithIconAndTooltip, {
20465
+ const title = /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx(LabelWithIcon, {
20398
20466
  propertyKey,
20399
20467
  icon: getIconForProperty(property, "small"),
20400
20468
  required: property.validation?.required,
@@ -20486,7 +20554,7 @@ function BlockFieldBinding({ propertyKey, value, error, showError, isSubmitting,
20486
20554
  storedProps
20487
20555
  }, `array_one_of_${internalId}`);
20488
20556
  };
20489
- const title = /* @__PURE__ */ jsx(LabelWithIconAndTooltip, {
20557
+ const title = /* @__PURE__ */ jsx(LabelWithIcon, {
20490
20558
  propertyKey,
20491
20559
  icon: getIconForProperty(property, "small"),
20492
20560
  required: property.validation?.required,
@@ -20624,25 +20692,22 @@ function DateTimeFieldBinding({ propertyKey, value, setValue, autoFocus, error,
20624
20692
  value,
20625
20693
  setValue
20626
20694
  });
20627
- return /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx(PropertyIdCopyTooltip, {
20628
- propertyKey,
20629
- children: /* @__PURE__ */ jsx(DateTimeField, {
20630
- size,
20631
- value: internalValue,
20632
- onChange: (dateValue) => setValue(dateValue),
20633
- mode: property.mode,
20634
- clearable: property.admin?.clearable,
20635
- locale,
20636
- error: showError,
20637
- disabled,
20638
- label: hideLabel ? void 0 : /* @__PURE__ */ jsx(LabelWithIcon, {
20639
- icon: getIconForProperty(property, "small"),
20640
- required: property.validation?.required,
20641
- className: showError ? "text-red-500 dark:text-red-500" : "text-text-secondary dark:text-text-secondary-dark",
20642
- title: property.name ?? propertyKey
20643
- }),
20644
- "aria-label": hideLabel ? property.name ?? propertyKey : void 0
20645
- })
20695
+ return /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx(DateTimeField, {
20696
+ size,
20697
+ value: internalValue,
20698
+ onChange: (dateValue) => setValue(dateValue),
20699
+ mode: property.mode,
20700
+ clearable: property.admin?.clearable,
20701
+ locale,
20702
+ error: showError,
20703
+ disabled,
20704
+ label: hideLabel ? void 0 : /* @__PURE__ */ jsx(LabelWithIcon, {
20705
+ icon: getIconForProperty(property, "small"),
20706
+ required: property.validation?.required,
20707
+ className: showError ? "text-red-500 dark:text-red-500" : "text-text-secondary dark:text-text-secondary-dark",
20708
+ title: property.name ?? propertyKey
20709
+ }),
20710
+ "aria-label": hideLabel ? property.name ?? propertyKey : void 0
20646
20711
  }), /* @__PURE__ */ jsx(FieldHelperText, {
20647
20712
  includeDescription,
20648
20713
  showError,
@@ -20668,7 +20733,7 @@ function KeyValueFieldBinding({ propertyKey, value, showError, error, disabled,
20668
20733
  initialValue: getIn(context.formex.initialValues, propertyKey),
20669
20734
  fieldName: property.name ?? propertyKey
20670
20735
  });
20671
- const title = /* @__PURE__ */ jsx(LabelWithIconAndTooltip, {
20736
+ const title = /* @__PURE__ */ jsx(LabelWithIcon, {
20672
20737
  propertyKey,
20673
20738
  icon: getIconForProperty(property, "small"),
20674
20739
  required: property.validation?.required,
@@ -21135,7 +21200,7 @@ function MapFieldBinding({ propertyKey, value, showError, error, disabled, prope
21135
21200
  } });
21136
21201
  },
21137
21202
  innerClassName: "px-2 md:px-4 pb-2 md:pb-4 pt-1 md:pt-2 bg-surface-card",
21138
- title: /* @__PURE__ */ jsx(LabelWithIconAndTooltip, {
21203
+ title: /* @__PURE__ */ jsx(LabelWithIcon, {
21139
21204
  propertyKey,
21140
21205
  icon: getIconForProperty(property, "small"),
21141
21206
  required: property.validation?.required,
@@ -21304,7 +21369,7 @@ function MarkdownEditorFieldBinding({ property, propertyKey, value, setValue, in
21304
21369
  return /* @__PURE__ */ jsxs(Fragment, { children: [
21305
21370
  !hideLabel && /* @__PURE__ */ jsx("div", {
21306
21371
  className: "flex items-center w-full",
21307
- children: /* @__PURE__ */ jsx(LabelWithIconAndTooltip, {
21372
+ children: /* @__PURE__ */ jsx(LabelWithIcon, {
21308
21373
  propertyKey,
21309
21374
  icon: getIconForProperty(property, "small"),
21310
21375
  required: property.validation?.required,
@@ -21390,7 +21455,7 @@ function MultiSelectFieldBinding({ propertyKey, value, setValue, error, showErro
21390
21455
  value: validValue ? value.map((v) => v?.toString()) : [],
21391
21456
  disabled,
21392
21457
  modalPopover: true,
21393
- label: hideLabel ? void 0 : /* @__PURE__ */ jsx(LabelWithIconAndTooltip, {
21458
+ label: hideLabel ? void 0 : /* @__PURE__ */ jsx(LabelWithIcon, {
21394
21459
  propertyKey,
21395
21460
  icon: getIconForProperty(property, "small"),
21396
21461
  required: property.validation?.required,
@@ -21458,7 +21523,7 @@ function ReferenceFieldBindingInternal({ propertyKey, value, setValue, error, sh
21458
21523
  referenceDialogController.open();
21459
21524
  };
21460
21525
  return /* @__PURE__ */ jsxs(Fragment, { children: [
21461
- !minimalistView && !hideLabel && /* @__PURE__ */ jsx(LabelWithIconAndTooltip, {
21526
+ !minimalistView && !hideLabel && /* @__PURE__ */ jsx(LabelWithIcon, {
21462
21527
  propertyKey,
21463
21528
  icon: getIconForProperty(property, "small"),
21464
21529
  required: property.validation?.required,
@@ -21558,7 +21623,7 @@ function RepeatFieldBinding({ propertyKey, value, error, showError, isSubmitting
21558
21623
  newDefaultEntry: getDefaultValueFor(property.of),
21559
21624
  onValueChange: (value) => setFieldValue(propertyKey, value)
21560
21625
  });
21561
- const title = /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx(LabelWithIconAndTooltip, {
21626
+ const title = /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx(LabelWithIcon, {
21562
21627
  propertyKey,
21563
21628
  icon: getIconForProperty(property, "small"),
21564
21629
  required: property.validation?.required,
@@ -21620,14 +21685,12 @@ function SelectFieldBinding({ propertyKey, value, setValue, error, showError, di
21620
21685
  fullWidth: true,
21621
21686
  position: "item-aligned",
21622
21687
  inputClassName: cls("w-full"),
21623
- label: hideLabel ? void 0 : /* @__PURE__ */ jsx(PropertyIdCopyTooltip, {
21688
+ label: hideLabel ? void 0 : /* @__PURE__ */ jsx(LabelWithIcon, {
21689
+ icon: getIconForProperty(property, "small"),
21690
+ required: property.validation?.required,
21691
+ title: property.name ?? propertyKey,
21624
21692
  propertyKey,
21625
- children: /* @__PURE__ */ jsx(LabelWithIcon, {
21626
- icon: getIconForProperty(property, "small"),
21627
- required: property.validation?.required,
21628
- title: property.name ?? propertyKey,
21629
- className: "h-8 text-text-secondary dark:text-text-secondary-dark ml-3.5 my-0"
21630
- })
21693
+ className: "h-8 text-text-secondary dark:text-text-secondary-dark ml-3.5 my-0"
21631
21694
  }),
21632
21695
  endAdornment: property.admin?.clearable && !disabled && /* @__PURE__ */ jsx(IconButton, {
21633
21696
  size: "small",
@@ -21728,7 +21791,7 @@ function StorageUploadFieldBinding({ propertyKey, value, setValue, error, showEr
21728
21791
  setValue
21729
21792
  });
21730
21793
  return /* @__PURE__ */ jsxs(Fragment, { children: [
21731
- !minimalistView && !hideLabel && /* @__PURE__ */ jsx(LabelWithIconAndTooltip, {
21794
+ !minimalistView && !hideLabel && /* @__PURE__ */ jsx(LabelWithIcon, {
21732
21795
  propertyKey,
21733
21796
  icon: getIconForProperty(property, "small"),
21734
21797
  required: property.validation?.required,
@@ -21968,22 +22031,19 @@ var SwitchFieldBinding = function SwitchFieldBinding({ propertyKey, value, setVa
21968
22031
  value,
21969
22032
  setValue
21970
22033
  });
21971
- return /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx(PropertyIdCopyTooltip, {
21972
- propertyKey,
21973
- children: /* @__PURE__ */ jsx(BooleanSwitchWithLabel, {
21974
- value,
21975
- onValueChange: (v) => setValue(v),
21976
- error: showError,
21977
- position: hideLabel ? "start" : void 0,
21978
- label: hideLabel ? void 0 : /* @__PURE__ */ jsx(LabelWithIcon, {
21979
- icon: getIconForProperty(property, "small"),
21980
- required: property.validation?.required,
21981
- title: property.name ?? propertyKey
21982
- }),
21983
- disabled,
21984
- autoFocus,
21985
- size
21986
- })
22034
+ return /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx(BooleanSwitchWithLabel, {
22035
+ value,
22036
+ onValueChange: (v) => setValue(v),
22037
+ error: showError,
22038
+ position: hideLabel ? "start" : void 0,
22039
+ label: hideLabel ? void 0 : /* @__PURE__ */ jsx(LabelWithIcon, {
22040
+ icon: getIconForProperty(property, "small"),
22041
+ required: property.validation?.required,
22042
+ title: property.name ?? propertyKey
22043
+ }),
22044
+ disabled,
22045
+ autoFocus,
22046
+ size
21987
22047
  }), /* @__PURE__ */ jsx(FieldHelperText, {
21988
22048
  includeDescription,
21989
22049
  showError,
@@ -22040,47 +22100,44 @@ function TextFieldBinding({ propertyKey, value, setValue, error, showError, disa
22040
22100
  });
22041
22101
  const accessibleName = property.name ?? propertyKey;
22042
22102
  return /* @__PURE__ */ jsxs(Fragment, { children: [
22043
- /* @__PURE__ */ jsx(PropertyIdCopyTooltip, {
22044
- propertyKey,
22045
- children: isMultiline ? /* @__PURE__ */ jsxs("div", {
22046
- className: cls("rounded-md relative max-w-full min-h-[64px]", fieldBackgroundMixin, fieldBackgroundHoverMixin, showError && error ? "border border-red-500 dark:border-red-600" : ""),
22047
- children: [
22048
- label && /* @__PURE__ */ jsx("div", {
22049
- className: "pointer-events-none absolute top-1 text-xs font-medium px-3 text-text-secondary dark:text-text-secondary-dark",
22050
- children: label
22051
- }),
22052
- /* @__PURE__ */ jsx(TextareaAutosize, {
22053
- value: displayValue,
22054
- onChange,
22055
- autoFocus,
22056
- disabled,
22057
- "aria-label": accessibleName,
22058
- className: cls("rounded-md resize-none w-full outline-none text-sm bg-transparent min-h-[64px] px-3", label ? "pt-8 pb-2" : "py-2", disabled && "outline-none opacity-50 text-surface-accent-600 dark:text-surface-accent-500", showError && error ? "text-red-500 dark:text-red-600" : "")
22059
- }),
22060
- property.admin?.clearable && /* @__PURE__ */ jsx("div", {
22061
- className: "flex flex-row justify-center items-center absolute h-full right-0 top-0 mr-4",
22062
- children: /* @__PURE__ */ jsx(IconButton, {
22063
- onClick: handleClearClick,
22064
- children: /* @__PURE__ */ jsx(XIcon, {})
22065
- })
22066
- })
22067
- ]
22068
- }) : /* @__PURE__ */ jsx(TextField, {
22069
- size,
22070
- value: displayValue,
22071
- onChange,
22072
- autoFocus,
22073
- label,
22074
- "aria-label": label ? void 0 : accessibleName,
22075
- type: inputType,
22076
- disabled,
22077
- endAdornment: property.admin?.clearable && /* @__PURE__ */ jsx(IconButton, {
22078
- onClick: handleClearClick,
22079
- children: /* @__PURE__ */ jsx(XIcon, {})
22103
+ isMultiline ? /* @__PURE__ */ jsxs("div", {
22104
+ className: cls("rounded-md relative max-w-full min-h-[64px]", fieldBackgroundMixin, fieldBackgroundHoverMixin, showError && error ? "border border-red-500 dark:border-red-600" : ""),
22105
+ children: [
22106
+ label && /* @__PURE__ */ jsx("div", {
22107
+ className: "pointer-events-none absolute top-1 text-xs font-medium px-3 text-text-secondary dark:text-text-secondary-dark",
22108
+ children: label
22080
22109
  }),
22081
- error: showError ? !!error : void 0,
22082
- inputClassName: error ? "text-red-500 dark:text-red-600" : ""
22083
- })
22110
+ /* @__PURE__ */ jsx(TextareaAutosize, {
22111
+ value: displayValue,
22112
+ onChange,
22113
+ autoFocus,
22114
+ disabled,
22115
+ "aria-label": accessibleName,
22116
+ className: cls("rounded-md resize-none w-full outline-none text-sm bg-transparent min-h-[64px] px-3", label ? "pt-8 pb-2" : "py-2", disabled && "outline-none opacity-50 text-surface-accent-600 dark:text-surface-accent-500", showError && error ? "text-red-500 dark:text-red-600" : "")
22117
+ }),
22118
+ property.admin?.clearable && /* @__PURE__ */ jsx("div", {
22119
+ className: "flex flex-row justify-center items-center absolute h-full right-0 top-0 mr-4",
22120
+ children: /* @__PURE__ */ jsx(IconButton, {
22121
+ onClick: handleClearClick,
22122
+ children: /* @__PURE__ */ jsx(XIcon, {})
22123
+ })
22124
+ })
22125
+ ]
22126
+ }) : /* @__PURE__ */ jsx(TextField, {
22127
+ size,
22128
+ value: displayValue,
22129
+ onChange,
22130
+ autoFocus,
22131
+ label,
22132
+ "aria-label": label ? void 0 : accessibleName,
22133
+ type: inputType,
22134
+ disabled,
22135
+ endAdornment: property.admin?.clearable && /* @__PURE__ */ jsx(IconButton, {
22136
+ onClick: handleClearClick,
22137
+ children: /* @__PURE__ */ jsx(XIcon, {})
22138
+ }),
22139
+ error: showError ? !!error : void 0,
22140
+ inputClassName: error ? "text-red-500 dark:text-red-600" : ""
22084
22141
  }),
22085
22142
  /* @__PURE__ */ jsx(FieldHelperText, {
22086
22143
  includeDescription,
@@ -22153,84 +22210,81 @@ function VectorFieldBinding({ propertyKey, value, setValue, error, showError, di
22153
22210
  className: "flex items-center justify-between mb-1",
22154
22211
  children: label
22155
22212
  }),
22156
- /* @__PURE__ */ jsx(PropertyIdCopyTooltip, {
22157
- propertyKey,
22158
- children: /* @__PURE__ */ jsx("div", {
22159
- className: "w-full",
22160
- children: !isEditing ? /* @__PURE__ */ jsxs("div", {
22161
- className: cls("flex flex-col gap-3 p-4 rounded-xl border bg-surface-field transition-all duration-200", defaultBorderMixin),
22213
+ /* @__PURE__ */ jsx("div", {
22214
+ className: "w-full",
22215
+ children: !isEditing ? /* @__PURE__ */ jsxs("div", {
22216
+ className: cls("flex flex-col gap-3 p-4 rounded-xl border bg-surface-field transition-all duration-200", defaultBorderMixin),
22217
+ children: [/* @__PURE__ */ jsxs("div", {
22218
+ className: "flex items-center justify-between flex-wrap gap-2",
22162
22219
  children: [/* @__PURE__ */ jsxs("div", {
22163
- className: "flex items-center justify-between flex-wrap gap-2",
22164
- children: [/* @__PURE__ */ jsxs("div", {
22165
- className: "flex items-center gap-2.5",
22166
- children: [
22167
- /* @__PURE__ */ jsx("div", { className: `w-2.5 h-2.5 rounded-full ${isPopulated ? "bg-emerald-500 animate-pulse" : "bg-surface-300 dark:bg-surface-600"}` }),
22168
- /* @__PURE__ */ jsx("span", {
22169
- className: "text-sm font-semibold text-text-primary dark:text-text-primary-dark",
22170
- children: isPopulated ? `${arrayValue.length} Dimensions` : "Empty Vector"
22171
- }),
22172
- isPopulated && /* @__PURE__ */ jsx("span", {
22173
- className: "text-xs text-text-secondary dark:text-text-secondary-dark px-2 py-0.5 rounded-full bg-surface-raised font-medium",
22174
- children: "Embedding"
22175
- })
22176
- ]
22177
- }), /* @__PURE__ */ jsxs("div", {
22178
- className: "flex items-center gap-2",
22179
- children: [
22180
- isPopulated && /* @__PURE__ */ jsx(Button, {
22181
- variant: "text",
22182
- size: "small",
22183
- onClick: () => setShowValues(!showValues),
22184
- startIcon: showValues ? /* @__PURE__ */ jsx(EyeOffIcon, { size: 14 }) : /* @__PURE__ */ jsx(EyeIcon, { size: 14 }),
22185
- children: showValues ? "Hide values" : "Show values"
22186
- }),
22187
- !disabled && /* @__PURE__ */ jsx(Button, {
22188
- variant: "outlined",
22189
- size: "small",
22190
- onClick: () => setIsEditing(true),
22191
- startIcon: /* @__PURE__ */ jsx(PencilIcon, { size: 14 }),
22192
- children: isPopulated ? "Edit values" : "Add values"
22193
- }),
22194
- isPopulated && !disabled && /* @__PURE__ */ jsx(IconButton, {
22195
- size: "small",
22196
- onClick: handleClearClick,
22197
- className: "text-text-secondary hover:text-red-500",
22198
- children: /* @__PURE__ */ jsx(Trash2Icon, { size: 14 })
22199
- })
22200
- ]
22201
- })]
22202
- }), showValues && isPopulated && /* @__PURE__ */ jsx("div", {
22203
- className: "mt-1 p-3 rounded-lg bg-surface-well border border-hairline max-h-36 overflow-y-auto font-mono text-[11px] leading-relaxed text-text-secondary dark:text-text-secondary-dark break-all selection:bg-primary/20",
22204
- children: arrayValue.join(", ")
22205
- })]
22206
- }) : /* @__PURE__ */ jsxs("div", {
22207
- className: cls("flex flex-col gap-2 p-4 rounded-xl border bg-surface-field", defaultBorderMixin),
22208
- children: [/* @__PURE__ */ jsx(TextField, {
22209
- size,
22210
- "aria-label": `${property.name ?? propertyKey} vector values`,
22211
- value: textValue,
22212
- onChange,
22213
- autoFocus: true,
22214
- placeholder: `e.g., 0.15, -0.42, 0.88 (Requires ${property.dimensions} dimensions)`,
22215
- disabled,
22216
- error: showError ? !!error : void 0,
22217
- inputClassName: error ? "text-red-500 dark:text-red-600 font-mono text-xs" : "font-mono text-xs"
22220
+ className: "flex items-center gap-2.5",
22221
+ children: [
22222
+ /* @__PURE__ */ jsx("div", { className: `w-2.5 h-2.5 rounded-full ${isPopulated ? "bg-emerald-500 animate-pulse" : "bg-surface-300 dark:bg-surface-600"}` }),
22223
+ /* @__PURE__ */ jsx("span", {
22224
+ className: "text-sm font-semibold text-text-primary dark:text-text-primary-dark",
22225
+ children: isPopulated ? `${arrayValue.length} Dimensions` : "Empty Vector"
22226
+ }),
22227
+ isPopulated && /* @__PURE__ */ jsx("span", {
22228
+ className: "text-xs text-text-secondary dark:text-text-secondary-dark px-2 py-0.5 rounded-full bg-surface-raised font-medium",
22229
+ children: "Embedding"
22230
+ })
22231
+ ]
22218
22232
  }), /* @__PURE__ */ jsxs("div", {
22219
- className: "flex justify-end gap-2 mt-2",
22220
- children: [/* @__PURE__ */ jsx(Button, {
22221
- variant: "outlined",
22222
- size: "small",
22223
- onClick: () => setIsEditing(false),
22224
- children: "Cancel"
22225
- }), /* @__PURE__ */ jsx(Button, {
22226
- variant: "filled",
22227
- size: "small",
22228
- onClick: () => setIsEditing(false),
22229
- startIcon: /* @__PURE__ */ jsx(CheckIcon, { size: 14 }),
22230
- children: "Done"
22231
- })]
22233
+ className: "flex items-center gap-2",
22234
+ children: [
22235
+ isPopulated && /* @__PURE__ */ jsx(Button, {
22236
+ variant: "text",
22237
+ size: "small",
22238
+ onClick: () => setShowValues(!showValues),
22239
+ startIcon: showValues ? /* @__PURE__ */ jsx(EyeOffIcon, { size: 14 }) : /* @__PURE__ */ jsx(EyeIcon, { size: 14 }),
22240
+ children: showValues ? "Hide values" : "Show values"
22241
+ }),
22242
+ !disabled && /* @__PURE__ */ jsx(Button, {
22243
+ variant: "outlined",
22244
+ size: "small",
22245
+ onClick: () => setIsEditing(true),
22246
+ startIcon: /* @__PURE__ */ jsx(PencilIcon, { size: 14 }),
22247
+ children: isPopulated ? "Edit values" : "Add values"
22248
+ }),
22249
+ isPopulated && !disabled && /* @__PURE__ */ jsx(IconButton, {
22250
+ size: "small",
22251
+ onClick: handleClearClick,
22252
+ className: "text-text-secondary hover:text-red-500",
22253
+ children: /* @__PURE__ */ jsx(Trash2Icon, { size: 14 })
22254
+ })
22255
+ ]
22232
22256
  })]
22233
- })
22257
+ }), showValues && isPopulated && /* @__PURE__ */ jsx("div", {
22258
+ className: "mt-1 p-3 rounded-lg bg-surface-well border border-hairline max-h-36 overflow-y-auto font-mono text-[11px] leading-relaxed text-text-secondary dark:text-text-secondary-dark break-all selection:bg-primary/20",
22259
+ children: arrayValue.join(", ")
22260
+ })]
22261
+ }) : /* @__PURE__ */ jsxs("div", {
22262
+ className: cls("flex flex-col gap-2 p-4 rounded-xl border bg-surface-field", defaultBorderMixin),
22263
+ children: [/* @__PURE__ */ jsx(TextField, {
22264
+ size,
22265
+ "aria-label": `${property.name ?? propertyKey} vector values`,
22266
+ value: textValue,
22267
+ onChange,
22268
+ autoFocus: true,
22269
+ placeholder: `e.g., 0.15, -0.42, 0.88 (Requires ${property.dimensions} dimensions)`,
22270
+ disabled,
22271
+ error: showError ? !!error : void 0,
22272
+ inputClassName: error ? "text-red-500 dark:text-red-600 font-mono text-xs" : "font-mono text-xs"
22273
+ }), /* @__PURE__ */ jsxs("div", {
22274
+ className: "flex justify-end gap-2 mt-2",
22275
+ children: [/* @__PURE__ */ jsx(Button, {
22276
+ variant: "outlined",
22277
+ size: "small",
22278
+ onClick: () => setIsEditing(false),
22279
+ children: "Cancel"
22280
+ }), /* @__PURE__ */ jsx(Button, {
22281
+ variant: "filled",
22282
+ size: "small",
22283
+ onClick: () => setIsEditing(false),
22284
+ startIcon: /* @__PURE__ */ jsx(CheckIcon, { size: 14 }),
22285
+ children: "Done"
22286
+ })]
22287
+ })]
22234
22288
  })
22235
22289
  }),
22236
22290
  /* @__PURE__ */ jsx(FieldHelperText, {
@@ -22336,49 +22390,46 @@ function GeopointFieldBinding({ propertyKey, value, setValue, error, showError,
22336
22390
  title: property.name ?? propertyKey
22337
22391
  })
22338
22392
  }),
22339
- /* @__PURE__ */ jsx(PropertyIdCopyTooltip, {
22340
- propertyKey,
22341
- children: /* @__PURE__ */ jsxs("div", {
22342
- className: "flex gap-4 w-full items-center",
22343
- children: [
22344
- /* @__PURE__ */ jsx(TextField, {
22345
- className: "flex-1",
22346
- size,
22347
- label: "Latitude",
22348
- value: latText,
22349
- autoFocus,
22350
- disabled,
22351
- error: showError ? Boolean(error) || latInvalid : latInvalid,
22352
- onChange: (e) => {
22353
- setLatText(e.target.value);
22354
- commit(e.target.value, lngText);
22355
- },
22356
- placeholder: "e.g. 41.3874",
22357
- inputClassName: "font-mono"
22358
- }),
22359
- /* @__PURE__ */ jsx(TextField, {
22360
- className: "flex-1",
22361
- size,
22362
- label: "Longitude",
22363
- value: lngText,
22364
- disabled,
22365
- error: showError ? Boolean(error) || lngInvalid : lngInvalid,
22366
- onChange: (e) => {
22367
- setLngText(e.target.value);
22368
- commit(latText, e.target.value);
22369
- },
22370
- placeholder: "e.g. 2.1686",
22371
- inputClassName: "font-mono"
22372
- }),
22373
- !disabled && (latText || lngText) && /* @__PURE__ */ jsx(IconButton, {
22374
- size: "small",
22375
- onClick: handleClear,
22376
- className: "shrink-0 text-text-secondary hover:text-red-500",
22377
- "aria-label": "Clear location",
22378
- children: /* @__PURE__ */ jsx(Trash2Icon, { size: 14 })
22379
- })
22380
- ]
22381
- })
22393
+ /* @__PURE__ */ jsxs("div", {
22394
+ className: "flex gap-4 w-full items-center",
22395
+ children: [
22396
+ /* @__PURE__ */ jsx(TextField, {
22397
+ className: "flex-1",
22398
+ size,
22399
+ label: "Latitude",
22400
+ value: latText,
22401
+ autoFocus,
22402
+ disabled,
22403
+ error: showError ? Boolean(error) || latInvalid : latInvalid,
22404
+ onChange: (e) => {
22405
+ setLatText(e.target.value);
22406
+ commit(e.target.value, lngText);
22407
+ },
22408
+ placeholder: "e.g. 41.3874",
22409
+ inputClassName: "font-mono"
22410
+ }),
22411
+ /* @__PURE__ */ jsx(TextField, {
22412
+ className: "flex-1",
22413
+ size,
22414
+ label: "Longitude",
22415
+ value: lngText,
22416
+ disabled,
22417
+ error: showError ? Boolean(error) || lngInvalid : lngInvalid,
22418
+ onChange: (e) => {
22419
+ setLngText(e.target.value);
22420
+ commit(latText, e.target.value);
22421
+ },
22422
+ placeholder: "e.g. 2.1686",
22423
+ inputClassName: "font-mono"
22424
+ }),
22425
+ !disabled && (latText || lngText) && /* @__PURE__ */ jsx(IconButton, {
22426
+ size: "small",
22427
+ onClick: handleClear,
22428
+ className: "shrink-0 text-text-secondary hover:text-red-500",
22429
+ "aria-label": "Clear location",
22430
+ children: /* @__PURE__ */ jsx(Trash2Icon, { size: 14 })
22431
+ })
22432
+ ]
22382
22433
  }),
22383
22434
  /* @__PURE__ */ jsx(FieldHelperText, {
22384
22435
  includeDescription,
@@ -22459,59 +22510,56 @@ function BinaryFieldBinding({ propertyKey, value, setValue, error, showError, di
22459
22510
  title: property.name ?? propertyKey
22460
22511
  })
22461
22512
  }),
22462
- /* @__PURE__ */ jsx(PropertyIdCopyTooltip, {
22463
- propertyKey,
22464
- children: /* @__PURE__ */ jsx("div", {
22465
- className: "w-full",
22466
- children: !isEditing ? /* @__PURE__ */ jsxs("div", {
22467
- className: cls("flex items-center justify-between gap-2 p-4 rounded-xl border bg-surface-field", defaultBorderMixin),
22468
- children: [/* @__PURE__ */ jsxs("div", {
22469
- className: "flex items-center gap-2.5 min-w-0",
22470
- children: [/* @__PURE__ */ jsx("div", { className: `w-2.5 h-2.5 rounded-full shrink-0 ${isPopulated ? "bg-emerald-500" : "bg-surface-300 dark:bg-surface-600"}` }), /* @__PURE__ */ jsx("span", {
22471
- className: "text-sm font-semibold text-text-primary truncate",
22472
- children: malformed ? "Invalid base64" : isPopulated ? `${humanSize(bytes)} of binary data` : "Empty"
22473
- })]
22474
- }), /* @__PURE__ */ jsxs("div", {
22475
- className: "flex items-center gap-2 shrink-0",
22476
- children: [!disabled && /* @__PURE__ */ jsx(Button, {
22477
- variant: "outlined",
22478
- size: "small",
22479
- onClick: () => setIsEditing(true),
22480
- startIcon: /* @__PURE__ */ jsx(PencilIcon, { size: 14 }),
22481
- children: isPopulated ? "Edit base64" : "Add base64"
22482
- }), isPopulated && !disabled && /* @__PURE__ */ jsx(IconButton, {
22483
- size: "small",
22484
- onClick: handleClear,
22485
- className: "text-text-secondary hover:text-red-500",
22486
- "aria-label": "Clear binary value",
22487
- children: /* @__PURE__ */ jsx(Trash2Icon, { size: 14 })
22488
- })]
22513
+ /* @__PURE__ */ jsx("div", {
22514
+ className: "w-full",
22515
+ children: !isEditing ? /* @__PURE__ */ jsxs("div", {
22516
+ className: cls("flex items-center justify-between gap-2 p-4 rounded-xl border bg-surface-field", defaultBorderMixin),
22517
+ children: [/* @__PURE__ */ jsxs("div", {
22518
+ className: "flex items-center gap-2.5 min-w-0",
22519
+ children: [/* @__PURE__ */ jsx("div", { className: `w-2.5 h-2.5 rounded-full shrink-0 ${isPopulated ? "bg-emerald-500" : "bg-surface-300 dark:bg-surface-600"}` }), /* @__PURE__ */ jsx("span", {
22520
+ className: "text-sm font-semibold text-text-primary truncate",
22521
+ children: malformed ? "Invalid base64" : isPopulated ? `${humanSize(bytes)} of binary data` : "Empty"
22489
22522
  })]
22490
- }) : /* @__PURE__ */ jsxs("div", {
22491
- className: cls("flex flex-col gap-2 p-4 rounded-xl border", defaultBorderMixin),
22492
- children: [/* @__PURE__ */ jsx(TextField, {
22493
- size,
22494
- "aria-label": `${property.name ?? propertyKey} base64 value`,
22495
- value: text,
22496
- onChange,
22497
- autoFocus: autoFocus ?? true,
22498
- multiline: true,
22499
- minRows: 4,
22500
- disabled,
22501
- placeholder: "Base64-encoded bytes, e.g. iVBORw0KGgo…",
22502
- error: showError ? Boolean(error) || malformed : malformed,
22503
- inputClassName: `font-mono text-xs ${malformed ? "text-red-500" : ""}`
22504
- }), /* @__PURE__ */ jsx("div", {
22505
- className: "flex justify-end",
22506
- children: /* @__PURE__ */ jsx(Button, {
22507
- variant: "filled",
22508
- size: "small",
22509
- onClick: () => setIsEditing(false),
22510
- startIcon: /* @__PURE__ */ jsx(CheckIcon, { size: 14 }),
22511
- children: "Done"
22512
- })
22523
+ }), /* @__PURE__ */ jsxs("div", {
22524
+ className: "flex items-center gap-2 shrink-0",
22525
+ children: [!disabled && /* @__PURE__ */ jsx(Button, {
22526
+ variant: "outlined",
22527
+ size: "small",
22528
+ onClick: () => setIsEditing(true),
22529
+ startIcon: /* @__PURE__ */ jsx(PencilIcon, { size: 14 }),
22530
+ children: isPopulated ? "Edit base64" : "Add base64"
22531
+ }), isPopulated && !disabled && /* @__PURE__ */ jsx(IconButton, {
22532
+ size: "small",
22533
+ onClick: handleClear,
22534
+ className: "text-text-secondary hover:text-red-500",
22535
+ "aria-label": "Clear binary value",
22536
+ children: /* @__PURE__ */ jsx(Trash2Icon, { size: 14 })
22513
22537
  })]
22514
- })
22538
+ })]
22539
+ }) : /* @__PURE__ */ jsxs("div", {
22540
+ className: cls("flex flex-col gap-2 p-4 rounded-xl border", defaultBorderMixin),
22541
+ children: [/* @__PURE__ */ jsx(TextField, {
22542
+ size,
22543
+ "aria-label": `${property.name ?? propertyKey} base64 value`,
22544
+ value: text,
22545
+ onChange,
22546
+ autoFocus: autoFocus ?? true,
22547
+ multiline: true,
22548
+ minRows: 4,
22549
+ disabled,
22550
+ placeholder: "Base64-encoded bytes, e.g. iVBORw0KGgo…",
22551
+ error: showError ? Boolean(error) || malformed : malformed,
22552
+ inputClassName: `font-mono text-xs ${malformed ? "text-red-500" : ""}`
22553
+ }), /* @__PURE__ */ jsx("div", {
22554
+ className: "flex justify-end",
22555
+ children: /* @__PURE__ */ jsx(Button, {
22556
+ variant: "filled",
22557
+ size: "small",
22558
+ onClick: () => setIsEditing(false),
22559
+ startIcon: /* @__PURE__ */ jsx(CheckIcon, { size: 14 }),
22560
+ children: "Done"
22561
+ })
22562
+ })]
22515
22563
  })
22516
22564
  }),
22517
22565
  /* @__PURE__ */ jsx(FieldHelperText, {
@@ -22576,7 +22624,7 @@ function MultipleRelationFieldBinding({ propertyKey, value: valueProp, error, sh
22576
22624
  property.admin?.previewProperties,
22577
22625
  value
22578
22626
  ]);
22579
- const title = /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx(LabelWithIconAndTooltip, {
22627
+ const title = /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx(LabelWithIcon, {
22580
22628
  propertyKey,
22581
22629
  icon: getIconForProperty(property, "small"),
22582
22630
  required: property.validation?.required,
@@ -22657,7 +22705,7 @@ function RelationSelectorBinding({ propertyKey, value, size, error, showError, d
22657
22705
  return /* @__PURE__ */ jsxs("div", {
22658
22706
  className: "",
22659
22707
  children: [
22660
- !hideLabel && /* @__PURE__ */ jsx(LabelWithIconAndTooltip, {
22708
+ !hideLabel && /* @__PURE__ */ jsx(LabelWithIcon, {
22661
22709
  propertyKey,
22662
22710
  icon: getIconForProperty(property, "small"),
22663
22711
  required: property.validation?.required,
@@ -22707,7 +22755,7 @@ function SingleRelationFieldBinding({ propertyKey, value, size, error, showError
22707
22755
  };
22708
22756
  const usedRelation = Array.isArray(value) ? void 0 : normalizedValue ?? void 0;
22709
22757
  return /* @__PURE__ */ jsxs(Fragment, { children: [
22710
- !hideLabel && /* @__PURE__ */ jsx(LabelWithIconAndTooltip, {
22758
+ !hideLabel && /* @__PURE__ */ jsx(LabelWithIcon, {
22711
22759
  propertyKey,
22712
22760
  icon: getIconForProperty(property, "small"),
22713
22761
  required: property.validation?.required,
@@ -22759,14 +22807,12 @@ function SingleRelationFieldBinding({ propertyKey, value, size, error, showError
22759
22807
  function UserSelectFieldBinding({ propertyKey, value, setValue, error, showError, disabled, autoFocus, touched, property, includeDescription, hideLabel, size = "large" }) {
22760
22808
  const selectorSize = size;
22761
22809
  return /* @__PURE__ */ jsxs(Fragment, { children: [
22762
- !hideLabel && /* @__PURE__ */ jsx(PropertyIdCopyTooltip, {
22810
+ !hideLabel && /* @__PURE__ */ jsx(LabelWithIcon, {
22811
+ icon: getIconForProperty(property, "small"),
22812
+ required: property.validation?.required,
22813
+ title: property.name,
22763
22814
  propertyKey,
22764
- children: /* @__PURE__ */ jsx(LabelWithIcon, {
22765
- icon: getIconForProperty(property, "small"),
22766
- required: property.validation?.required,
22767
- title: property.name,
22768
- className: "h-8 text-text-secondary dark:text-text-secondary-dark ml-3.5 my-0"
22769
- })
22815
+ className: "h-8 text-text-secondary dark:text-text-secondary-dark ml-3.5 my-0"
22770
22816
  }),
22771
22817
  /* @__PURE__ */ jsx(UserSelector, {
22772
22818
  value,
@@ -25574,6 +25620,6 @@ function getFullIdPath(propertyKey, propertyNamespace) {
25574
25620
  return idToPropertiesPath(propertyNamespace ? `${propertyNamespace}.${propertyKey}` : propertyKey);
25575
25621
  }
25576
25622
  //#endregion
25577
- export { NAVIGATION_DEFAULT_GROUP_NAME as $, useSidePanel as $n, getCollectionBySlugWithin as $t, getFieldId as A, ReadOnlyFieldBinding as An, getIconForProperty as Ar, convertDataToEntity as At, MapFieldBinding as B, KeyValuePreview as Bn, detectCsvDelimiter as Bt, EntityFormBinding as C, NavigationStateContext as Cn, FieldBlock as Cr, EntityCardBinding as Ct, getDefaultFieldConfig as D, SelectableTableContext as Dn, PropertyIdCopyTooltip as Dr, useCollectionEditorDialogsState as Dt, DEFAULT_FIELD_CONFIGS as E, SideDialogsControllerContext as En, spanClass as Er, ConfigControllerProvider as Et, SelectFieldBinding as F, PropertyPreview as Fn, isReferenceProperty as Fr, ImportSaveInProgress as Ft, useSelectionDialog as G, ArrayEnumPreview as Gn, SearchIconsView as Gt, DateTimeFieldBinding as H, ArrayOneOfPreview as Hn, parseCsvToObjects as Ht, RepeatFieldBinding as I, UserPreview as In, isRelationProperty as Ir, IMPORT_BATCH_SIZE as It, useBuildUrlController as J, ArrayOfReferencesPreview as Jn, BreadcrumbsProvider as Jt, SelectionTableBinding as K, ArrayOfStorageComponentsPreview as Kn, FieldCaption as Kt, ReferenceFieldBinding as L, NumberPropertyPreview as Ln, saveImportedEntities as Lt, TextFieldBinding as M, LabelWithIcon as Mn, getPropertiesWithPropertiesOrder as Mr, processValueMapping as Mt, SwitchFieldBinding as N, FieldHelperText as Nn, getPropertyInPath$1 as Nr, getInferenceType as Nt, getDefaultFieldId as O, ArrayCustomShapedFieldBinding as On, getBracketNotation as Or, ImportNewPropertyFieldPreview as Ot, StorageUploadFieldBinding as P, ArrayOfMapsPreview as Pn, getResolvedPropertyInPath as Pr, useImportConfig as Pt, useResolvedCollections as Q, SidePanelControllerContext as Qn, addInitialSlash as Qt, MultiSelectFieldBinding as R, BooleanPreview as Rn, ImportFileUpload as Rt, isSchemaChangeCancelled as S, useUrlController as Sn, RecordMeta as Sr, CollectionCardViewBinding as St, PropertyFieldBinding as T, useSideDialogsController as Tn, isSelfLabellingProperty as Tr, useCollectionEditorController as Tt, BlockFieldBinding as U, ArrayOfStringsPreview as Un, ArrayContainer as Ut, KeyValueFieldBinding as V, MapPropertyPreview as Vn, parseCsvRows as Vt, ArrayOfReferencesFieldBinding as W, ArrayPropertyEnumPreview as Wn, PropertyConfigBadge as Wt, useTopLevelNavigation as X, ReferencePreview as Xn, resolveEntityView as Xt, useBuildNavigationStateController as Y, InlineEntityListPreview as Yn, resolveEntityAction as Yt, useResolvedViews as Z, EntityPreviewBinding as Zn, mergeEntityActions as Zt, useCollectionsConfigController as _, CollectionTableBinding as _n, UrlComponentPreview as _r, editEntityAction as _t, namespaceToPropertiesPath as a, resolveCollectionPathIds$1 as an, getEntityTitlePropertyKey as ar, getEntityViewWidth as at, asUnavailable as b, useAdminContext as bn, FormSections as br, DetailViewBinding as bt, buildCollectionGenerationCallback as c, SelectionMenu as cn, StringPropertyPreview as cr, useSafeSnackbarController as ct, fromSerializableCollectionConfigs as d, resolveSelection as dn, StorageThumbnailInternal as dr, getInitialEntityValues as dt, getCollectionPathsCombinations as en, CollectionRegistryContext as er, useBuildCollectionRegistryController as et, fromSerializableProperties as f, selectionQueryToFindParams as fn, SkeletonPropertyComponent as fr, removeEmptyContainers as ft, toSerializableProperty as g, VirtualTableInput$1 as gn, renderSkeletonText as gr, deleteEntityAction as gt, toSerializableProperties as h, useSelectionController as hn, renderSkeletonImageThumbnail as hr, copyEntityAction as ht, namespaceToPropertiesOrderPath as i, removeTrailingSlash$1 as in, getEntityPreviewKeys as ir, buildSidePanelsFromUrl as it, VectorFieldBinding as j, LabelWithIconAndTooltip as jn, getIconForWidget as jr, flattenEntry as jt, getFieldConfig as k, useClearRestoreValue as kn, getDefaultPropertiesOrder as kr, DataNewPropertiesMapping as kt, validateCollectionJson as l, MAX_SELECTION_ROWS as ln, EnumValuesChip as lr, extractTouchedValues as lt, toSerializableCollectionConfig as m, walkEntityPages as mn, renderSkeletonIcon as mr, CollectionViewBinding as mt, getFullIdPath as n, removeInitialAndTrailingSlashes$1 as nn, getUserLabel as nr, resolveNavigationFrom as nt, CollectionGenerationApiError as o, resolveOpenEntityMode as on, getEntityTitlePropertyKeyForEntity as or, useBuildSidePanel as ot, fromSerializableProperty as p, serializeSelectionQuery as pn, renderSkeletonCaptionText as pr, zodToFormErrors as pt, SideDialogs as q, RelationPreview as qn, useBreadcrumbsController as qt, idToPropertiesPath as r, removeInitialSlash as rn, useResolvedUser as rr, useResolvedNavigationFrom as rt, DEFAULT_COLLECTION_GENERATION_ENDPOINT as s, resolveViewMode as sn, ArrayPropertyPreview as sr, EditViewBinding as st, getFullId as t, getLastSegment$1 as tn, useCollectionRegistryController as tr, useHistory as tt, fromSerializableCollectionConfig as u, SELECTION_PAGE_SIZE as un, StorageThumbnail as ur, getChanges as ut, LiveSchemaError as v, SelectableTable as vn, ImagePreview as vr, resetPasswordAction as vt, EntityForm as w, useNavigationStateController as wn, LABEL_ICON_SIZE as wr, CollectionViewActions as wt, createLiveSchemaClient as x, UrlContext as xn, FormRail as xr, EntityViewBinding as xt, SchemaChangeCancelled as y, CollectionRowActions as yn, EmptyValue as yr, CreationResultDialog as yt, MarkdownEditorFieldBinding as z, DatePreview as zn, convertFileToJson as zt };
25623
+ export { NAVIGATION_DEFAULT_GROUP_NAME as $, CollectionRegistryContext as $n, getCollectionBySlugWithin as $t, getFieldId as A, ReadOnlyFieldBinding as An, getIconForWidget as Ar, convertDataToEntity as At, MapFieldBinding as B, MapPropertyPreview as Bn, detectCsvDelimiter as Bt, EntityFormBinding as C, NavigationStateContext as Cn, LABEL_ICON_SIZE as Cr, EntityCardBinding as Ct, getDefaultFieldConfig as D, SelectableTableContext as Dn, getBracketNotation as Dr, useCollectionEditorDialogsState as Dt, DEFAULT_FIELD_CONFIGS as E, SideDialogsControllerContext as En, PropertyKeyHint as Er, ConfigControllerProvider as Et, SelectFieldBinding as F, UserPreview as Fn, isRelationProperty as Fr, ImportSaveInProgress as Ft, useSelectionDialog as G, ArrayOfStorageComponentsPreview as Gn, SearchIconsView as Gt, DateTimeFieldBinding as H, ArrayOfStringsPreview as Hn, parseCsvToObjects as Ht, RepeatFieldBinding as I, NumberPropertyPreview as In, IMPORT_BATCH_SIZE as It, useBuildUrlController as J, InlineEntityListPreview as Jn, BreadcrumbsProvider as Jt, SelectionTableBinding as K, RelationPreview as Kn, FieldCaption as Kt, ReferenceFieldBinding as L, BooleanPreview as Ln, saveImportedEntities as Lt, TextFieldBinding as M, FieldHelperText as Mn, getPropertyInPath$1 as Mr, processValueMapping as Mt, SwitchFieldBinding as N, ArrayOfMapsPreview as Nn, getResolvedPropertyInPath as Nr, getInferenceType as Nt, getDefaultFieldId as O, ArrayCustomShapedFieldBinding as On, getDefaultPropertiesOrder as Or, ImportNewPropertyFieldPreview as Ot, StorageUploadFieldBinding as P, PropertyPreview as Pn, isReferenceProperty as Pr, useImportConfig as Pt, useResolvedCollections as Q, useSidePanel as Qn, addInitialSlash as Qt, MultiSelectFieldBinding as R, DatePreview as Rn, ImportFileUpload as Rt, isSchemaChangeCancelled as S, useUrlController as Sn, FieldBlock as Sr, CollectionCardViewBinding as St, PropertyFieldBinding as T, useSideDialogsController as Tn, spanClass as Tr, useCollectionEditorController as Tt, BlockFieldBinding as U, ArrayPropertyEnumPreview as Un, ArrayContainer as Ut, KeyValueFieldBinding as V, ArrayOneOfPreview as Vn, parseCsvRows as Vt, ArrayOfReferencesFieldBinding as W, ArrayEnumPreview as Wn, PropertyConfigBadge as Wt, useTopLevelNavigation as X, EntityPreviewBinding as Xn, resolveEntityView as Xt, useBuildNavigationStateController as Y, ReferencePreview as Yn, resolveEntityAction as Yt, useResolvedViews as Z, SidePanelControllerContext as Zn, mergeEntityActions as Zt, useCollectionsConfigController as _, CollectionTableBinding as _n, ImagePreview as _r, editEntityAction as _t, namespaceToPropertiesPath as a, resolveCollectionPathIds$1 as an, getEntityTitlePropertyKeyForEntity as ar, getEntityViewWidth as at, asUnavailable as b, useAdminContext as bn, FormRail as br, DetailViewBinding as bt, buildCollectionGenerationCallback as c, SelectionMenu as cn, EnumValuesChip as cr, useSafeSnackbarController as ct, fromSerializableCollectionConfigs as d, resolveSelection as dn, SkeletonPropertyComponent as dr, getInitialEntityValues as dt, getCollectionPathsCombinations as en, useCollectionRegistryController as er, useBuildCollectionRegistryController as et, fromSerializableProperties as f, selectionQueryToFindParams as fn, renderSkeletonCaptionText as fr, removeEmptyContainers as ft, toSerializableProperty as g, VirtualTableInput$1 as gn, UrlComponentPreview as gr, deleteEntityAction as gt, toSerializableProperties as h, useSelectionController as hn, renderSkeletonText as hr, copyEntityAction as ht, namespaceToPropertiesOrderPath as i, removeTrailingSlash$1 as in, getEntityTitlePropertyKey as ir, buildSidePanelsFromUrl as it, VectorFieldBinding as j, LabelWithIcon as jn, getPropertiesWithPropertiesOrder as jr, flattenEntry as jt, getFieldConfig as k, useClearRestoreValue as kn, getIconForProperty as kr, DataNewPropertiesMapping as kt, validateCollectionJson as l, MAX_SELECTION_ROWS as ln, StorageThumbnail as lr, extractTouchedValues as lt, toSerializableCollectionConfig as m, walkEntityPages as mn, renderSkeletonImageThumbnail as mr, CollectionViewBinding as mt, getFullIdPath as n, removeInitialAndTrailingSlashes$1 as nn, useResolvedUser as nr, resolveNavigationFrom as nt, CollectionGenerationApiError as o, resolveOpenEntityMode as on, ArrayPropertyPreview as or, useBuildSidePanel as ot, fromSerializableProperty as p, serializeSelectionQuery as pn, renderSkeletonIcon as pr, zodToFormErrors as pt, SideDialogs as q, ArrayOfReferencesPreview as qn, useBreadcrumbsController as qt, idToPropertiesPath as r, removeInitialSlash as rn, getEntityPreviewKeys as rr, useResolvedNavigationFrom as rt, DEFAULT_COLLECTION_GENERATION_ENDPOINT as s, resolveViewMode as sn, StringPropertyPreview as sr, EditViewBinding as st, getFullId as t, getLastSegment$1 as tn, getUserLabel as tr, useHistory as tt, fromSerializableCollectionConfig as u, SELECTION_PAGE_SIZE as un, StorageThumbnailInternal as ur, getChanges as ut, LiveSchemaError as v, SelectableTable as vn, EmptyValue as vr, resetPasswordAction as vt, EntityForm as w, useNavigationStateController as wn, isSelfLabellingProperty as wr, CollectionViewActions as wt, createLiveSchemaClient as x, UrlContext as xn, RecordMeta as xr, EntityViewBinding as xt, SchemaChangeCancelled as y, CollectionRowActions as yn, FormSections as yr, CreationResultDialog as yt, MarkdownEditorFieldBinding as z, KeyValuePreview as zn, convertFileToJson as zt };
25578
25624
 
25579
- //# sourceMappingURL=util-jUWinb7D.js.map
25625
+ //# sourceMappingURL=util-qfCPxJzB.js.map