@open-mercato/ui 0.6.5-develop.5048.1.fd82f4ae17 → 0.6.5-develop.5099.1.85c0aff78c

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 (38) hide show
  1. package/.turbo/turbo-build.log +1 -1
  2. package/dist/backend/CrudForm.js +7 -57
  3. package/dist/backend/CrudForm.js.map +3 -3
  4. package/dist/backend/detail/InlineEditors.js +2 -51
  5. package/dist/backend/detail/InlineEditors.js.map +3 -3
  6. package/dist/backend/inputs/MarkdownField.js +20 -0
  7. package/dist/backend/inputs/MarkdownField.js.map +7 -0
  8. package/dist/backend/inputs/MdxEditorImpl.js +98 -0
  9. package/dist/backend/inputs/MdxEditorImpl.js.map +7 -0
  10. package/dist/backend/inputs/SwitchableMarkdownInput.js +6 -38
  11. package/dist/backend/inputs/SwitchableMarkdownInput.js.map +2 -2
  12. package/dist/backend/markdown/markdownToPlainText.js +29 -0
  13. package/dist/backend/markdown/markdownToPlainText.js.map +2 -2
  14. package/dist/types/css.d.js +1 -0
  15. package/dist/types/css.d.js.map +7 -0
  16. package/package.json +4 -3
  17. package/src/backend/CrudForm.tsx +3 -67
  18. package/src/backend/__tests__/CrudForm.custom-fields.test.tsx +0 -1
  19. package/src/backend/__tests__/CrudForm.datetime.test.tsx +0 -1
  20. package/src/backend/__tests__/CrudForm.defaults.test.tsx +0 -1
  21. package/src/backend/__tests__/CrudForm.dotPath.test.tsx +0 -1
  22. package/src/backend/__tests__/CrudForm.doubleSubmit.test.tsx +0 -1
  23. package/src/backend/__tests__/CrudForm.navigation.test.tsx +0 -1
  24. package/src/backend/__tests__/CrudForm.optimisticLock.test.tsx +0 -1
  25. package/src/backend/__tests__/CrudForm.render.test.tsx +0 -1
  26. package/src/backend/__tests__/CrudForm.sortable.test.tsx +0 -1
  27. package/src/backend/__tests__/CrudForm.transformData.test.tsx +0 -1
  28. package/src/backend/__tests__/CrudForm.unsavedNavigation.test.tsx +0 -1
  29. package/src/backend/__tests__/CrudForm.validation.test.tsx +0 -1
  30. package/src/backend/__tests__/CustomDataSection.test.tsx +0 -1
  31. package/src/backend/__tests__/lazy-heavy-libraries.test.ts +16 -3
  32. package/src/backend/detail/InlineEditors.tsx +14 -76
  33. package/src/backend/inputs/MarkdownField.tsx +34 -0
  34. package/src/backend/inputs/MdxEditorImpl.tsx +113 -0
  35. package/src/backend/inputs/SwitchableMarkdownInput.tsx +5 -54
  36. package/src/backend/markdown/__tests__/markdownToPlainText.test.ts +13 -0
  37. package/src/backend/markdown/markdownToPlainText.ts +41 -0
  38. package/src/types/css.d.ts +5 -0
@@ -1,3 +1,3 @@
1
1
  Generated lucide registry with 141 icons -> /home/runner/work/open-mercato/open-mercato/packages/ui/src/backend/icons/lucideRegistry.generated.tsx
2
- [build:ui] found 383 entry points
2
+ [build:ui] found 386 entry points
3
3
  [build:ui] built successfully
@@ -26,7 +26,6 @@ import {
26
26
  SelectValue
27
27
  } from "../primitives/select.js";
28
28
  import { flash } from "./FlashMessages.js";
29
- import dynamic from "next/dynamic";
30
29
  import { FormHeader } from "./forms/FormHeader.js";
31
30
  import { FormFooter } from "./forms/FormFooter.js";
32
31
  import { Button } from "../primitives/button.js";
@@ -99,6 +98,7 @@ import { InjectedField } from "./injection/InjectedField.js";
99
98
  import { evaluateInjectedVisibility } from "./injection/visibility-utils.js";
100
99
  import { ComponentReplacementHandles } from "@open-mercato/shared/modules/widgets/component-registry";
101
100
  import { RichEditor } from "../primitives/rich-editor.js";
101
+ import MarkdownField from "./inputs/MarkdownField.js";
102
102
  const EMPTY_OPTIONS = [];
103
103
  const SELECT_CLEAR_SENTINEL = "__crudform_select_clear__";
104
104
  const FOCUSABLE_SELECTOR = '[data-crud-focus-target], input:not([type="hidden"]):not([disabled]), textarea:not([disabled]), select:not([disabled]), [tabindex]:not([tabindex="-1"])';
@@ -2255,8 +2255,8 @@ function CrudForm({
2255
2255
  if (!("type" in f) || f.type === "custom") continue;
2256
2256
  const builtin = f;
2257
2257
  const staticOptions = builtin.options ?? EMPTY_OPTIONS;
2258
- const dynamic2 = dynamicOptions[f.id];
2259
- if (dynamic2 && dynamic2.length) {
2258
+ const dynamic = dynamicOptions[f.id];
2259
+ if (dynamic && dynamic.length) {
2260
2260
  const merged = [];
2261
2261
  const seen = /* @__PURE__ */ new Set();
2262
2262
  for (const opt of staticOptions) {
@@ -2264,7 +2264,7 @@ function CrudForm({
2264
2264
  seen.add(opt.value);
2265
2265
  merged.push(opt);
2266
2266
  }
2267
- for (const opt of dynamic2) {
2267
+ for (const opt of dynamic) {
2268
2268
  if (seen.has(opt.value)) continue;
2269
2269
  seen.add(opt.value);
2270
2270
  merged.push(opt);
@@ -2272,8 +2272,8 @@ function CrudForm({
2272
2272
  map.set(f.id, merged);
2273
2273
  } else if (staticOptions.length) {
2274
2274
  map.set(f.id, staticOptions);
2275
- } else if (dynamic2) {
2276
- map.set(f.id, dynamic2);
2275
+ } else if (dynamic) {
2276
+ map.set(f.id, dynamic);
2277
2277
  }
2278
2278
  }
2279
2279
  return map;
@@ -3078,58 +3078,8 @@ function TextAreaInput({
3078
3078
  }
3079
3079
  );
3080
3080
  }
3081
- const MDEditor = dynamic(async () => {
3082
- const mod = await import("@uiw/react-md-editor");
3083
- return mod.default;
3084
- }, { ssr: false });
3085
- let markdownPreviewOptionsPromise = null;
3086
- async function loadMarkdownPreviewOptions() {
3087
- if (!markdownPreviewOptionsPromise) {
3088
- markdownPreviewOptionsPromise = import("remark-gfm").then((mod) => ({ remarkPlugins: [mod.default ?? mod] })).catch(() => ({}));
3089
- }
3090
- return markdownPreviewOptionsPromise;
3091
- }
3092
- const EMPTY_PREVIEW_OPTIONS = {};
3093
3081
  const MarkdownEditor = React.memo(function MarkdownEditor2({ value = "", onChange }) {
3094
- const containerRef = React.useRef(null);
3095
- const [local, setLocal] = React.useState(value);
3096
- const [previewOptions, setPreviewOptions] = React.useState(EMPTY_PREVIEW_OPTIONS);
3097
- const typingRef = React.useRef(false);
3098
- React.useEffect(() => {
3099
- if (!typingRef.current) setLocal(value);
3100
- }, [value]);
3101
- React.useEffect(() => {
3102
- let mounted = true;
3103
- void loadMarkdownPreviewOptions().then((resolved) => {
3104
- if (!mounted) return;
3105
- setPreviewOptions(resolved);
3106
- });
3107
- return () => {
3108
- mounted = false;
3109
- };
3110
- }, []);
3111
- const handleChange = React.useCallback((v) => {
3112
- typingRef.current = true;
3113
- setLocal(v ?? "");
3114
- }, []);
3115
- const commit = React.useCallback(() => {
3116
- if (!typingRef.current) return;
3117
- typingRef.current = false;
3118
- onChange(local);
3119
- requestAnimationFrame(() => {
3120
- const ta = containerRef.current?.querySelector("textarea");
3121
- ta?.focus();
3122
- });
3123
- }, [local, onChange]);
3124
- return /* @__PURE__ */ jsx("div", { ref: containerRef, "data-color-mode": "light", className: "w-full", onBlur: () => commit(), children: /* @__PURE__ */ jsx(
3125
- MDEditor,
3126
- {
3127
- value: local,
3128
- height: 220,
3129
- onChange: handleChange,
3130
- previewOptions
3131
- }
3132
- ) });
3082
+ return /* @__PURE__ */ jsx(MarkdownField, { value, onChange });
3133
3083
  }, (prev, next) => prev.value === next.value);
3134
3084
  const HtmlRichEditorField = React.memo(function HtmlRichEditorField2({ value = "", onChange }) {
3135
3085
  const t = useT();