@multiplatform.one/frappe-ui 7.7.0 → 7.7.2

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 (57) hide show
  1. package/dist/cjs/FileBrowser/AttachLibrary.cjs +2 -2
  2. package/dist/cjs/FileBrowser/AttachLibrary.native.js +8 -2
  3. package/dist/cjs/FileBrowser/AttachLibrary.native.js.map +1 -1
  4. package/dist/cjs/FrappeImageView.cjs +2 -8
  5. package/dist/cjs/FrappeImageView.native.js +2 -9
  6. package/dist/cjs/FrappeImageView.native.js.map +1 -1
  7. package/dist/cjs/fields/LinkTree.cjs +5 -3
  8. package/dist/cjs/fields/LinkTree.native.js +9 -5
  9. package/dist/cjs/fields/LinkTree.native.js.map +1 -1
  10. package/dist/cjs/frappeStoryTarget.cjs +4 -2
  11. package/dist/cjs/frappeStoryTarget.native.js +4 -3
  12. package/dist/cjs/frappeStoryTarget.native.js.map +1 -1
  13. package/dist/esm/FileBrowser/AttachLibrary.mjs +2 -2
  14. package/dist/esm/FileBrowser/AttachLibrary.mjs.map +1 -1
  15. package/dist/esm/FileBrowser/AttachLibrary.native.js +8 -2
  16. package/dist/esm/FileBrowser/AttachLibrary.native.js.map +1 -1
  17. package/dist/esm/FrappeImageView.mjs +2 -7
  18. package/dist/esm/FrappeImageView.mjs.map +1 -1
  19. package/dist/esm/FrappeImageView.native.js +2 -8
  20. package/dist/esm/FrappeImageView.native.js.map +1 -1
  21. package/dist/esm/fields/LinkTree.mjs +5 -3
  22. package/dist/esm/fields/LinkTree.mjs.map +1 -1
  23. package/dist/esm/fields/LinkTree.native.js +9 -5
  24. package/dist/esm/fields/LinkTree.native.js.map +1 -1
  25. package/dist/esm/frappeStoryTarget.mjs +4 -1
  26. package/dist/esm/frappeStoryTarget.mjs.map +1 -1
  27. package/dist/esm/frappeStoryTarget.native.js +4 -2
  28. package/dist/esm/frappeStoryTarget.native.js.map +1 -1
  29. package/dist/jsx/FileBrowser/AttachLibrary.mjs +2 -2
  30. package/dist/jsx/FileBrowser/AttachLibrary.mjs.map +1 -1
  31. package/dist/jsx/FileBrowser/AttachLibrary.native.js +8 -2
  32. package/dist/jsx/FileBrowser/AttachLibrary.native.js.map +1 -1
  33. package/dist/jsx/FrappeImageView.mjs +2 -7
  34. package/dist/jsx/FrappeImageView.mjs.map +1 -1
  35. package/dist/jsx/FrappeImageView.native.js +2 -9
  36. package/dist/jsx/FrappeImageView.native.js.map +1 -1
  37. package/dist/jsx/fields/LinkTree.mjs +5 -3
  38. package/dist/jsx/fields/LinkTree.mjs.map +1 -1
  39. package/dist/jsx/fields/LinkTree.native.js +9 -5
  40. package/dist/jsx/fields/LinkTree.native.js.map +1 -1
  41. package/dist/jsx/frappeStoryTarget.mjs +4 -1
  42. package/dist/jsx/frappeStoryTarget.mjs.map +1 -1
  43. package/dist/jsx/frappeStoryTarget.native.js +4 -3
  44. package/dist/jsx/frappeStoryTarget.native.js.map +1 -1
  45. package/package.json +16 -16
  46. package/src/FileBrowser/AttachLibrary.tsx +13 -1
  47. package/src/FrappeImageView.tsx +16 -15
  48. package/src/classicScriptSafety.spec.ts +47 -0
  49. package/src/desk/DeskFormSidebar.stories.tsx +19 -1
  50. package/src/fields/LinkTree.tsx +18 -3
  51. package/src/fields/Progress/Progress.spec.tsx +160 -0
  52. package/src/frappeStoryTarget.tsx +25 -9
  53. package/types/FileBrowser/AttachLibrary.d.ts.map +1 -1
  54. package/types/FrappeImageView.d.ts.map +1 -1
  55. package/types/fields/LinkTree.d.ts.map +1 -1
  56. package/types/frappeStoryTarget.d.ts +2 -2
  57. package/types/frappeStoryTarget.d.ts.map +1 -1
@@ -34,7 +34,6 @@ module.exports = __toCommonJS(frappeStoryTarget_exports);
34
34
  var import_jsx_runtime = require("react/jsx-runtime");
35
35
  var import_react = require("react");
36
36
  var import_FrappeProvider = require("./FrappeProvider.native.js");
37
- const import_meta = {};
38
37
  function _instanceof(left, right) {
39
38
  "@swc/helpers - instanceof";
40
39
 
@@ -47,8 +46,10 @@ function _instanceof(left, right) {
47
46
  var _sbEnv_STORYBOOK_FRAPPE_URL;
48
47
  var sbEnv = function () {
49
48
  try {
50
- var _env;
51
- return (_env = import_meta.env) !== null && _env !== void 0 ? _env : {};
49
+ return {
50
+ STORYBOOK_FRAPPE_LIVE: process.env.STORYBOOK_FRAPPE_LIVE,
51
+ STORYBOOK_FRAPPE_URL: process.env.STORYBOOK_FRAPPE_URL
52
+ };
52
53
  } catch (unused) {
53
54
  return {};
54
55
  }
@@ -1 +1 @@
1
- {"version":3,"names":["__defProp","Object","defineProperty","__getOwnPropDesc","getOwnPropertyDescriptor","__getOwnPropNames","getOwnPropertyNames","__hasOwnProp","prototype","hasOwnProperty","__export","target","all","name","get","enumerable","__copyProps","to","from","except","desc","key","call","__toCommonJS","mod","value","frappeStoryTarget_exports","FrappeStoryProvider","LIVE_TODO_NAME","LiveToDoGate","frappeStoriesLive","frappeStoryBaseUrl","module","exports","import_jsx_runtime","require","import_react","import_FrappeProvider","import_meta","_instanceof","left","right","Symbol","hasInstance","_sbEnv_STORYBOOK_FRAPPE_URL","sbEnv","_env","env","unused","STORYBOOK_FRAPPE_LIVE","pageOrigin","window","location","origin","STORYBOOK_FRAPPE_URL","liveSocketOptions","transports","param","children","fixtures","jsx","FrappeProvider","baseURL","socketOptions","liveToDoPromise","lookupOrSeedLiveToDo","_this","_data","_this1","base","replace","preferred","fetch","encodeURIComponent","ok","list","_data_","_data1","_this2","row","json","data","whoRes","me","message","created","method","headers","body","JSON","stringify","description","status","priority"],"sources":["../../src/frappeStoryTarget.tsx"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["__defProp","Object","defineProperty","__getOwnPropDesc","getOwnPropertyDescriptor","__getOwnPropNames","getOwnPropertyNames","__hasOwnProp","prototype","hasOwnProperty","__export","target","all","name","get","enumerable","__copyProps","to","from","except","desc","key","call","__toCommonJS","mod","value","frappeStoryTarget_exports","FrappeStoryProvider","LIVE_TODO_NAME","LiveToDoGate","frappeStoriesLive","frappeStoryBaseUrl","module","exports","import_jsx_runtime","require","import_react","import_FrappeProvider","_instanceof","left","right","Symbol","hasInstance","_sbEnv_STORYBOOK_FRAPPE_URL","sbEnv","STORYBOOK_FRAPPE_LIVE","process","env","STORYBOOK_FRAPPE_URL","unused","pageOrigin","window","location","origin","liveSocketOptions","transports","param","children","fixtures","jsx","FrappeProvider","baseURL","socketOptions","liveToDoPromise","lookupOrSeedLiveToDo","_this","_data","_this1","base","replace","preferred","fetch","encodeURIComponent","ok","list","_data_","_data1","_this2","row","json","data","whoRes","me","message","created","method","headers","body","JSON","stringify","description","status","priority","allocated_to"],"sources":["../../src/frappeStoryTarget.tsx"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@multiplatform.one/frappe-ui",
3
- "version": "7.7.0",
3
+ "version": "7.7.2",
4
4
  "description": "Pre-wired Tamagui components for Frappe doctypes with live data",
5
5
  "keywords": [
6
6
  "cross-platform",
@@ -85,18 +85,18 @@
85
85
  "html5-qrcode": "^2.3.8",
86
86
  "signature_pad": "^5.1.3",
87
87
  "tamagui": "2.7.6",
88
- "@multiplatform.one/components": "7.7.0",
89
- "@multiplatform.one/desktop": "7.7.0",
90
- "@multiplatform.one/forms": "7.7.0",
91
- "@multiplatform.one/frappe": "7.7.0",
92
- "@multiplatform.one/i18n": "7.7.0",
93
- "@multiplatform.one/markdown": "7.7.0",
94
- "@multiplatform.one/platform": "7.7.0",
95
- "@multiplatform.one/rich-text": "7.7.0",
96
- "@multiplatform.one/router": "7.7.0",
97
- "@multiplatform.one/store": "7.7.0",
98
- "@multiplatform.one/table": "7.7.0",
99
- "@multiplatform.one/theme": "7.7.0"
88
+ "@multiplatform.one/components": "7.7.2",
89
+ "@multiplatform.one/forms": "7.7.2",
90
+ "@multiplatform.one/desktop": "7.7.2",
91
+ "@multiplatform.one/frappe": "7.7.2",
92
+ "@multiplatform.one/i18n": "7.7.2",
93
+ "@multiplatform.one/markdown": "7.7.2",
94
+ "@multiplatform.one/platform": "7.7.2",
95
+ "@multiplatform.one/rich-text": "7.7.2",
96
+ "@multiplatform.one/router": "7.7.2",
97
+ "@multiplatform.one/store": "7.7.2",
98
+ "@multiplatform.one/table": "7.7.2",
99
+ "@multiplatform.one/theme": "7.7.2"
100
100
  },
101
101
  "devDependencies": {
102
102
  "@tamagui/build": "2.7.6",
@@ -108,9 +108,9 @@
108
108
  "react-dom": "19.2.5",
109
109
  "react-i18next": "^16.6.6",
110
110
  "vitest": "^4.1.5",
111
- "@multiplatform.one/config": "7.7.0",
112
- "@multiplatform.one/storybook": "7.7.0",
113
- "@multiplatform.one/test-utils": "7.7.0"
111
+ "@multiplatform.one/config": "7.7.2",
112
+ "@multiplatform.one/storybook": "7.7.2",
113
+ "@multiplatform.one/test-utils": "7.7.2"
114
114
  },
115
115
  "peerDependencies": {
116
116
  "@react-native-community/datetimepicker": ">=8.0.1",
@@ -41,9 +41,21 @@ export function AttachLibrary({
41
41
  put role="dialog" in the a11y tree and kept the whole FileBrowser
42
42
  subtree live. Every other house dialog (ConfirmDialog, CellModalEditor,
43
43
  HelpAboutDialog) already wraps overlay + content this way. */}
44
+ {/* Explicit keys: Tamagui wraps every Portal child in AnimatePresence's
45
+ PresenceChild, whose key is `child.key || ""`. Two keyless siblings
46
+ therefore both land on "" and React logs a duplicate-key error per
47
+ commit — and two presence children sharing a key can swap identity
48
+ when the dialog toggles. Naming them is the fix on our side of the
49
+ boundary (MPO-197). */}
44
50
  <Dialog.Portal>
45
- <DialogOverlay backgroundColor="$background" opacity={0.5} data-filebrowser-attach-scrim />
51
+ <DialogOverlay
52
+ key="attach-scrim"
53
+ backgroundColor="$background"
54
+ opacity={0.5}
55
+ data-filebrowser-attach-scrim
56
+ />
46
57
  <DialogContent
58
+ key="attach-content"
47
59
  aria-label={t("Attach file")}
48
60
  data-filebrowser-attach-dialog
49
61
  width={drill ? "100%" : 820}
@@ -5,25 +5,26 @@ import React, { useMemo } from "react";
5
5
  import { useTranslation } from "react-i18next";
6
6
  import { Spinner, formCommonColors } from "@multiplatform.one/forms";
7
7
  import { Image, Text, YStack, type YStackProps } from "tamagui";
8
+ import { isServer } from "@multiplatform.one/platform";
8
9
  import { useResolvedKnobs } from "@multiplatform.one/theme";
9
10
  import { useFrappeConfig } from "./FrappeProvider";
10
11
  import { FrappeReconnectIndicator } from "./FrappeReconnectIndicator";
11
12
 
12
13
  /**
13
- * True when this module is evaluated during web server rendering. Same
14
- * guarded resolution as `frappeStoryTarget` / `frappe`'s `useLiveQuery`:
15
- * a bare `import.meta.env.SSR` member access throws on native
16
- * (Metro/Hermes has no Vite define — `import.meta.env` is undefined at
17
- * runtime), which crashed this component on device. Native lands on
18
- * `false`, which is correct — native is always a client.
14
+ * True when this module is evaluated during web server rendering.
15
+ *
16
+ * This used to read `import.meta.env.SSR` behind a try/catch, which MPO-192
17
+ * ruled out: in a classic script — the vxrn/rolldown Hermes bundle, or any
18
+ * Metro bundle for platform=web, which is what an Expo DOM component
19
+ * (`'use dom'`) is — `import.meta` is a PARSE-time SyntaxError, so the catch
20
+ * never runs and the whole module fails to parse.
21
+ *
22
+ * `isServer` carries no `import.meta` and is split at the FILE level
23
+ * (@tamagui/constants ships a `.native` flavour hardcoding it false), so it
24
+ * answers correctly in all four places: true only under web server render,
25
+ * false in a browser, on native, and inside a DOM component's WebView.
19
26
  */
20
- const IS_SSR: boolean = (() => {
21
- try {
22
- return (import.meta as ImportMeta & { env?: { SSR?: boolean } }).env?.SSR === true;
23
- } catch {
24
- return false;
25
- }
26
- })();
27
+ const IS_SSR: boolean = isServer;
27
28
 
28
29
  /**
29
30
  * Resolves an image field value to a full URL.
@@ -85,8 +86,8 @@ export function FrappeImageView<TDoc extends { name: string; doctype: string }>(
85
86
  // when FrappeProvider already carries it.
86
87
  const providerConfig = useFrappeConfig();
87
88
  // Note: `typeof window` is unreliable because react-native-web polyfills
88
- // `window` during SSR. Use the module-level Vite SSR flag instead
89
- // (bare `import.meta.env.SSR` crashes native — see IS_SSR above).
89
+ // `window` during SSR. Use the module-level platform flag instead
90
+ // (see IS_SSR above).
90
91
  if (IS_SSR) {
91
92
  const {
92
93
  doctype,
@@ -0,0 +1,47 @@
1
+ import { readFileSync } from "node:fs";
2
+ import { resolve } from "node:path";
3
+ import { isServer } from "@multiplatform.one/platform";
4
+ import { describe, expect, it } from "vitest";
5
+
6
+ /**
7
+ * MPO-204 / MPO-192. `import.meta` is a PARSE-time SyntaxError in a classic
8
+ * script, and two bundles execute mpo as one: the vxrn/rolldown native bundle
9
+ * for Hermes, and any Metro bundle for platform=web — which is what an Expo
10
+ * DOM component (`'use dom'`) is. A try/catch never runs, because the file
11
+ * never parses, so the token has to be ABSENT rather than guarded. Both files
12
+ * below are reachable from a DOM component through the frappe-ui surface.
13
+ */
14
+ const src = (name: string) =>
15
+ readFileSync(resolve(process.cwd(), "src", name), "utf8").replace(/\/\*[\s\S]*?\*\//g, "");
16
+
17
+ describe("frappeStoryTarget carries no import.meta (MPO-204)", () => {
18
+ const source = src("frappeStoryTarget.tsx");
19
+
20
+ it("contains no import.meta token", () => {
21
+ expect(source).not.toMatch(/import\.meta/);
22
+ });
23
+
24
+ it("reads both Storybook keys as static process.env member expressions, the only spelling bundlers inline", () => {
25
+ expect(source).toMatch(/process\.env\.STORYBOOK_FRAPPE_LIVE\b/);
26
+ expect(source).toMatch(/process\.env\.STORYBOOK_FRAPPE_URL\b/);
27
+ // A computed read is never inlined, so it would always resolve undefined.
28
+ expect(source).not.toMatch(/process\.env\[/);
29
+ });
30
+ });
31
+
32
+ describe("FrappeImageView carries no import.meta (MPO-204)", () => {
33
+ const source = src("FrappeImageView.tsx");
34
+
35
+ it("contains no import.meta token", () => {
36
+ expect(source).not.toMatch(/import\.meta/);
37
+ });
38
+
39
+ it("takes its SSR answer from the platform package, which is split by FILE and not by a bundler define", () => {
40
+ expect(source).toMatch(/import \{ isServer \} from "@multiplatform\.one\/platform";/);
41
+ expect(source).toMatch(/const IS_SSR: boolean = isServer;/);
42
+ });
43
+
44
+ it("resolves isServer false in a browser-like environment, so the client branch renders", () => {
45
+ expect(isServer).toBe(false);
46
+ });
47
+ });
@@ -20,6 +20,24 @@ export default {
20
20
 
21
21
  const MOCK_HOST = "https://deskformsidebar.mock.test";
22
22
 
23
+ /**
24
+ * The document image is an inline data: URI, not "/files/todo.png".
25
+ * `resolveFileUrl` prefixes a "/..." value with baseURL, so a path fixture
26
+ * makes the <img> fetch https://deskformsidebar.mock.test/files/todo.png for
27
+ * real — the story's window.fetch shim only intercepts fetch(), never an
28
+ * image load — and the story prints ERR_TUNNEL_CONNECTION_FAILED. A data: URI
29
+ * goes through resolveFileUrl untouched and paints without a request, which
30
+ * is what G-15 story honesty asks for (MPO-197).
31
+ */
32
+ const storyImage =
33
+ "data:image/svg+xml;utf8," +
34
+ encodeURIComponent(
35
+ '<svg xmlns="http://www.w3.org/2000/svg" width="240" height="240" viewBox="0 0 24 24">' +
36
+ '<rect width="24" height="24" rx="3" fill="#4c6ef5"/>' +
37
+ '<path d="M6 12.5l3.5 3.5L18 8" fill="none" stroke="#fff" stroke-width="2" ' +
38
+ 'stroke-linecap="round" stroke-linejoin="round"/></svg>',
39
+ );
40
+
23
41
  function jsonResponse(body: unknown, status = 200): Response {
24
42
  return new Response(JSON.stringify(body), {
25
43
  status,
@@ -70,7 +88,7 @@ const todoDocs = [
70
88
  owner: "jane@example.com",
71
89
  modified_by: "john@example.com",
72
90
  creation: "2026-02-01",
73
- image: "/files/todo.png",
91
+ image: storyImage,
74
92
  _assign: JSON.stringify(["jane@example.com"]),
75
93
  },
76
94
  ];
@@ -40,9 +40,24 @@ export function LinkTree({
40
40
  const isLocked = disabled || readOnly;
41
41
 
42
42
  const finalBaseURL = baseURL ?? config?.baseURL ?? "";
43
- const connectionConfig: FrappeConnectionConfig | undefined = finalBaseURL
44
- ? { baseURL: finalBaseURL, socketPort: config?.socketPort, auth: auth ?? config?.auth }
45
- : undefined;
43
+ const finalAuth = auth ?? config?.auth;
44
+ // Carry `fixtures` through, the way FrappeTreeView does. Without it a
45
+ // LinkTree under a fixture-backed FrappeProvider takes the HTTP path
46
+ // instead: every story dials socket.io at the mock host and prints
47
+ // ERR_TUNNEL_CONNECTION_FAILED, which is a G-15 story-honesty breach and
48
+ // was the only console noise left on FrappeUI/LinkTree (MPO-197).
49
+ const connectionConfig: FrappeConnectionConfig | undefined = useMemo(
50
+ () =>
51
+ finalBaseURL
52
+ ? {
53
+ baseURL: finalBaseURL,
54
+ socketPort: config?.socketPort,
55
+ auth: finalAuth,
56
+ fixtures: config?.fixtures,
57
+ }
58
+ : undefined,
59
+ [finalBaseURL, config?.socketPort, finalAuth, config?.fixtures],
60
+ );
46
61
 
47
62
  const { meta } = useDocTypeMeta(connectionConfig, doctype);
48
63
  const titleField = meta?.title_field ?? "name";
@@ -0,0 +1,160 @@
1
+ /**
2
+ * ProgressField contract specs.
3
+ *
4
+ * ProgressField is a thin adapter: it takes the Frappe field props and hands
5
+ * them to the forms Progress, which owns the track, the clamp and the label
6
+ * chrome. So what is worth pinning here is the FORWARDING — every prop the
7
+ * adapter is documented to pass (readOnly / skeleton / compact / max /
8
+ * helperText / error) has to actually arrive, because the failure mode of a
9
+ * thin adapter is a silently dropped prop that makes three story variants
10
+ * render identically (the ContractProbe story exists for exactly that).
11
+ *
12
+ * The registry half matters too: "Progress" is a display fieldtype, so its
13
+ * adapter must coerce a non-number to 0 rather than hand the track NaN.
14
+ */
15
+ import { renderWithProviders } from "@multiplatform.one/test-utils";
16
+ import { cleanup } from "@testing-library/react";
17
+ import type React from "react";
18
+ import { afterEach, describe, expect, it } from "vitest";
19
+ import { getFieldComponent, type FieldRenderProps } from "../../fieldRegistry";
20
+ import { ProgressField } from ".";
21
+
22
+ afterEach(cleanup);
23
+
24
+ describe("ProgressField chrome", () => {
25
+ it("renders the label and a track", () => {
26
+ const { container } = renderWithProviders(
27
+ <ProgressField label="Completion" value={65} max={100} />,
28
+ );
29
+ expect(container.textContent).toContain("Completion");
30
+ expect(container.firstElementChild).toBeTruthy();
31
+ });
32
+
33
+ it("shows helperText", () => {
34
+ const { container } = renderWithProviders(
35
+ <ProgressField label="Completion" value={65} helperText="how far along" />,
36
+ );
37
+ expect(container.textContent).toContain("how far along");
38
+ });
39
+
40
+ it("shows the error message", () => {
41
+ const { container } = renderWithProviders(
42
+ <ProgressField label="Completion" value={65} error="Value out of range" />,
43
+ );
44
+ expect(container.textContent).toContain("Value out of range");
45
+ });
46
+
47
+ it("marks a required field", () => {
48
+ const { container } = renderWithProviders(
49
+ <ProgressField label="Completion" value={65} required />,
50
+ );
51
+ expect(container.textContent).toContain("Completion");
52
+ expect(container.querySelector("[aria-required], [aria-hidden]")).toBeTruthy();
53
+ });
54
+
55
+ it("a value with no max still paints (max defaults to 100)", () => {
56
+ const { container } = renderWithProviders(<ProgressField label="Completion" value={40} />);
57
+ expect(container.firstElementChild).toBeTruthy();
58
+ expect(container.textContent).toContain("Completion");
59
+ });
60
+ });
61
+
62
+ /**
63
+ * The ContractProbe story asserts these three visually. If the adapter drops
64
+ * any of them the probe variants render identically to Main and nobody
65
+ * notices, so pin them structurally too.
66
+ */
67
+ describe("ProgressField forwards the thin-adapter contract", () => {
68
+ it("skeleton renders a different tree from the loaded field", () => {
69
+ const loaded = renderWithProviders(<ProgressField label="Completion" value={65} />);
70
+ const loadedHtml = loaded.container.innerHTML;
71
+ cleanup();
72
+ const skeleton = renderWithProviders(<ProgressField label="Completion" value={65} skeleton />);
73
+ expect(skeleton.container.innerHTML).not.toBe(loadedHtml);
74
+ });
75
+
76
+ it("compact renders a different tree from the default density", () => {
77
+ const normal = renderWithProviders(<ProgressField label="Completion" value={65} />);
78
+ const normalHtml = normal.container.innerHTML;
79
+ cleanup();
80
+ const compact = renderWithProviders(<ProgressField label="Completion" value={65} compact />);
81
+ expect(compact.container.innerHTML).not.toBe(normalHtml);
82
+ });
83
+
84
+ it("readOnly is accepted and still paints the value", () => {
85
+ const { container } = renderWithProviders(
86
+ <ProgressField label="Completion" value={65} readOnly />,
87
+ );
88
+ expect(container.textContent).toContain("Completion");
89
+ expect(container.firstElementChild).toBeTruthy();
90
+ });
91
+
92
+ it("max reaches the track: the same value at two maxes renders differently", () => {
93
+ const wide = renderWithProviders(<ProgressField label="Completion" value={50} max={100} />);
94
+ const wideHtml = wide.container.innerHTML;
95
+ cleanup();
96
+ const narrow = renderWithProviders(<ProgressField label="Completion" value={50} max={50} />);
97
+ expect(narrow.container.innerHTML).not.toBe(wideHtml);
98
+ });
99
+ });
100
+
101
+ describe("registry resolution (Progress fieldtype)", () => {
102
+ function propsFor(overrides: Partial<FieldRenderProps> = {}): FieldRenderProps {
103
+ return { value: "", onChange: () => {}, ...overrides };
104
+ }
105
+
106
+ it("resolves 'Progress' to ProgressField", () => {
107
+ const Component = getFieldComponent("Progress")!;
108
+ expect(Component).toBeTruthy();
109
+ const element = (Component as Function)(
110
+ propsFor({ value: 65, label: "Completion" }),
111
+ ) as React.ReactElement<Record<string, any>>;
112
+ expect(element.type).toBe(ProgressField);
113
+ expect(element.props.value).toBe(65);
114
+ expect(element.props.label).toBe("Completion");
115
+ });
116
+
117
+ it("coerces a non-number to 0 rather than handing the track NaN", () => {
118
+ const Component = getFieldComponent("Progress")!;
119
+ const element = (Component as Function)(
120
+ propsFor({ value: "not a number" }),
121
+ ) as React.ReactElement<Record<string, any>>;
122
+ expect(element.props.value).toBe(0);
123
+ });
124
+
125
+ it("a null value becomes 0, not null", () => {
126
+ const Component = getFieldComponent("Progress")!;
127
+ const element = (Component as Function)(
128
+ propsFor({ value: null as unknown as string }),
129
+ ) as React.ReactElement<Record<string, any>>;
130
+ expect(element.props.value).toBe(0);
131
+ });
132
+
133
+ it("forwards the passthrough contract (helperText / readOnly / skeleton / compact)", () => {
134
+ const Component = getFieldComponent("Progress")!;
135
+ const element = (Component as Function)(
136
+ propsFor({
137
+ value: 20,
138
+ helperText: "from the doc",
139
+ readOnly: true,
140
+ skeleton: true,
141
+ compact: true,
142
+ } as Partial<FieldRenderProps>),
143
+ ) as React.ReactElement<Record<string, any>>;
144
+ expect(element.props.helperText).toBe("from the doc");
145
+ expect(element.props.readOnly).toBe(true);
146
+ expect(element.props.skeleton).toBe(true);
147
+ expect(element.props.compact).toBe(true);
148
+ });
149
+
150
+ it("falls back to the DocField description when no helperText is given", () => {
151
+ const Component = getFieldComponent("Progress")!;
152
+ const element = (Component as Function)(
153
+ propsFor({
154
+ value: 20,
155
+ fieldMeta: { description: "percent complete" },
156
+ } as Partial<FieldRenderProps>),
157
+ ) as React.ReactElement<Record<string, any>>;
158
+ expect(element.props.helperText).toBe("percent complete");
159
+ });
160
+ });
@@ -3,8 +3,8 @@
3
3
  *
4
4
  * The Storybook dev server (apps/storybook/.storybook/main.ts) probes the
5
5
  * bench selected by `STORYBOOK_FRAPPE_URL` (default: the local dev bench at
6
- * http://localhost:8000) and exposes the result as
7
- * `import.meta.env.STORYBOOK_FRAPPE_LIVE`. When the bench is reachable it
6
+ * http://localhost:8000) and defines the result as
7
+ * `process.env.STORYBOOK_FRAPPE_LIVE`. When the bench is reachable it
8
8
  * also proxies `/api` and `/socket.io` same-origin (the bench sends no CORS
9
9
  * headers) and injects the API token server-side, so no credentials ever
10
10
  * reach the preview bundle.
@@ -22,15 +22,31 @@ interface StorybookFrappeEnv {
22
22
  STORYBOOK_FRAPPE_URL?: string;
23
23
  }
24
24
 
25
- // Keep the exact `import.meta.env` member-access form — bundlers statically
26
- // replace that expression (vite/vxrn define), which is what keeps it out of
27
- // Hermes bundles. A bare `typeof import.meta` guard is NOT replaced and makes
28
- // Hermes fail at parse time ('import.meta' is currently unsupported). In the
29
- // CJS flavor esbuild shims `import.meta` to `{}`, so `.env` is undefined and
30
- // the fallback applies.
25
+ /**
26
+ * The two keys, read as STATIC `process.env.<KEY>` member expressions.
27
+ *
28
+ * This used to read `import.meta.env`. MPO-192 ruled that out: two bundles
29
+ * execute mpo as a CLASSIC script — the vxrn/rolldown native bundle for
30
+ * Hermes, and any Metro bundle for platform=web, which is what an Expo DOM
31
+ * component (`'use dom'`) is — and in a classic script `import.meta` is a
32
+ * PARSE-time SyntaxError, so the try/catch below never gets to run and the
33
+ * whole module fails to parse.
34
+ *
35
+ * `process.env.<KEY>` is the spelling every bundler on the way to a browser
36
+ * inlines, and it is exactly what public/platform/src/config/runtimeConfig.ts
37
+ * settled on. apps/storybook/.storybook/main.ts defines both keys for the
38
+ * preview bundle (Storybook's own `env` preset only defines the
39
+ * `import.meta.env.*` spelling, so the define is what carries these across).
40
+ * A dynamic `env[key]` read would never be inlined. Where nothing defined the
41
+ * keys and `process` does not exist, the reads throw and the catch answers
42
+ * with the fixtures fallback.
43
+ */
31
44
  const sbEnv: StorybookFrappeEnv = (() => {
32
45
  try {
33
- return (import.meta as ImportMeta & { env?: StorybookFrappeEnv }).env ?? {};
46
+ return {
47
+ STORYBOOK_FRAPPE_LIVE: process.env.STORYBOOK_FRAPPE_LIVE,
48
+ STORYBOOK_FRAPPE_URL: process.env.STORYBOOK_FRAPPE_URL,
49
+ };
34
50
  } catch {
35
51
  return {};
36
52
  }
@@ -1 +1 @@
1
- {"version":3,"file":"AttachLibrary.d.ts","sourceRoot":"","sources":["../../src/FileBrowser/AttachLibrary.tsx"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAE/C,MAAM,MAAM,kBAAkB,GAAG;IAC/B,IAAI,EAAE,OAAO,CAAC;IACd,YAAY,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACtC,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,CAAC,IAAI,EAAE,eAAe,KAAK,IAAI,CAAC;IACxC,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC;IACnC,KAAK,CAAC,EAAE,eAAe,EAAE,CAAC;IAC1B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,wBAAgB,aAAa,CAAC,EAC5B,IAAI,EACJ,YAAY,EACZ,KAAK,EACL,MAAM,EACN,QAAQ,EACR,KAAK,EACL,aAAa,EACb,MAAM,GACP,EAAE,kBAAkB,2CAmEpB"}
1
+ {"version":3,"file":"AttachLibrary.d.ts","sourceRoot":"","sources":["../../src/FileBrowser/AttachLibrary.tsx"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAE/C,MAAM,MAAM,kBAAkB,GAAG;IAC/B,IAAI,EAAE,OAAO,CAAC;IACd,YAAY,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACtC,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,CAAC,IAAI,EAAE,eAAe,KAAK,IAAI,CAAC;IACxC,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC;IACnC,KAAK,CAAC,EAAE,eAAe,EAAE,CAAC;IAC1B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,wBAAgB,aAAa,CAAC,EAC5B,IAAI,EACJ,YAAY,EACZ,KAAK,EACL,MAAM,EACN,QAAQ,EACR,KAAK,EACL,aAAa,EACb,MAAM,GACP,EAAE,kBAAkB,2CA+EpB"}
@@ -1 +1 @@
1
- {"version":3,"file":"FrappeImageView.d.ts","sourceRoot":"","sources":["../src/FrappeImageView.tsx"],"names":[],"mappings":"AAMA,OAAO,EAAuB,KAAK,WAAW,EAAE,MAAM,SAAS,CAAC;AA+BhE,MAAM,WAAW,oBAAoB,CAAC,IAAI,SAAS;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAE,SAAQ,IAAI,CAChG,WAAW,EACX,UAAU,CACX;IACC,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC,MAAM,IAAI,GAAG,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC;IACpE,MAAM,CAAC,EAAE,SAAS,CAAC,MAAM,IAAI,GAAG,MAAM,CAAC,EAAE,CAAC;IAC1C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC;IAC3C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7D,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACtC;;;;;;;OAOG;IACH,QAAQ,CAAC,EAAE,IAAI,EAAE,CAAC;CACnB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,eAAe,CAAC,IAAI,SAAS;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,EAC5E,KAAK,EAAE,oBAAoB,CAAC,IAAI,CAAC,2CAqElC"}
1
+ {"version":3,"file":"FrappeImageView.d.ts","sourceRoot":"","sources":["../src/FrappeImageView.tsx"],"names":[],"mappings":"AAMA,OAAO,EAAuB,KAAK,WAAW,EAAE,MAAM,SAAS,CAAC;AAgChE,MAAM,WAAW,oBAAoB,CAAC,IAAI,SAAS;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAE,SAAQ,IAAI,CAChG,WAAW,EACX,UAAU,CACX;IACC,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC,MAAM,IAAI,GAAG,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC;IACpE,MAAM,CAAC,EAAE,SAAS,CAAC,MAAM,IAAI,GAAG,MAAM,CAAC,EAAE,CAAC;IAC1C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC;IAC3C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7D,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACtC;;;;;;;OAOG;IACH,QAAQ,CAAC,EAAE,IAAI,EAAE,CAAC;CACnB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,eAAe,CAAC,IAAI,SAAS;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,EAC5E,KAAK,EAAE,oBAAoB,CAAC,IAAI,CAAC,2CAqElC"}
@@ -1 +1 @@
1
- {"version":3,"file":"LinkTree.d.ts","sourceRoot":"","sources":["../../src/fields/LinkTree.tsx"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAExC,wBAAgB,QAAQ,CAAC,EACvB,KAAK,EACL,KAAU,EACV,QAAQ,EACR,OAAO,EACP,OAAO,EACP,QAAgB,EAChB,QAAgB,EAChB,OAAO,EACP,IAAI,EACJ,KAAK,EACL,UAAU,EACV,QAAgB,EAChB,QAAgB,EAChB,OAAe,EACf,WAAW,EACX,gBAAgB,EAAE,iBAAiB,EACnC,GAAG,UAAU,EACd,EAAE,SAAS,2CAiEX"}
1
+ {"version":3,"file":"LinkTree.d.ts","sourceRoot":"","sources":["../../src/fields/LinkTree.tsx"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAExC,wBAAgB,QAAQ,CAAC,EACvB,KAAK,EACL,KAAU,EACV,QAAQ,EACR,OAAO,EACP,OAAO,EACP,QAAgB,EAChB,QAAgB,EAChB,OAAO,EACP,IAAI,EACJ,KAAK,EACL,UAAU,EACV,QAAgB,EAChB,QAAgB,EAChB,OAAe,EACf,WAAW,EACX,gBAAgB,EAAE,iBAAiB,EACnC,GAAG,UAAU,EACd,EAAE,SAAS,2CAgFX"}
@@ -3,8 +3,8 @@
3
3
  *
4
4
  * The Storybook dev server (apps/storybook/.storybook/main.ts) probes the
5
5
  * bench selected by `STORYBOOK_FRAPPE_URL` (default: the local dev bench at
6
- * http://localhost:8000) and exposes the result as
7
- * `import.meta.env.STORYBOOK_FRAPPE_LIVE`. When the bench is reachable it
6
+ * http://localhost:8000) and defines the result as
7
+ * `process.env.STORYBOOK_FRAPPE_LIVE`. When the bench is reachable it
8
8
  * also proxies `/api` and `/socket.io` same-origin (the bench sends no CORS
9
9
  * headers) and injects the API token server-side, so no credentials ever
10
10
  * reach the preview bundle.
@@ -1 +1 @@
1
- {"version":3,"file":"frappeStoryTarget.d.ts","sourceRoot":"","sources":["../src/frappeStoryTarget.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAuB,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAsB5D,0EAA0E;AAC1E,eAAO,MAAM,iBAAiB,SAAsC,CAAC;AAkBrE,eAAO,MAAM,kBAAkB,EAAE,MAGgC,CAAC;AAElE,MAAM,WAAW,wBAAwB;IACvC,QAAQ,EAAE,SAAS,CAAC;IACpB,gFAAgF;IAChF,QAAQ,CAAC,EAAE,eAAe,CAAC;CAC5B;AAeD,wBAAgB,mBAAmB,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,wBAAwB,2CAanF;AAED;;;;GAIG;AACH,eAAO,MAAM,cAAc,kBAAkB,CAAC;AA8C9C;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,EAC3B,IAAI,EACJ,QAAQ,GACT,EAAE;IACD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,SAAS,CAAC;CAC/C,2CAoCA"}
1
+ {"version":3,"file":"frappeStoryTarget.d.ts","sourceRoot":"","sources":["../src/frappeStoryTarget.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAuB,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAsC5D,0EAA0E;AAC1E,eAAO,MAAM,iBAAiB,SAAsC,CAAC;AAkBrE,eAAO,MAAM,kBAAkB,EAAE,MAGgC,CAAC;AAElE,MAAM,WAAW,wBAAwB;IACvC,QAAQ,EAAE,SAAS,CAAC;IACpB,gFAAgF;IAChF,QAAQ,CAAC,EAAE,eAAe,CAAC;CAC5B;AAeD,wBAAgB,mBAAmB,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,wBAAwB,2CAanF;AAED;;;;GAIG;AACH,eAAO,MAAM,cAAc,kBAAkB,CAAC;AA8C9C;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,EAC3B,IAAI,EACJ,QAAQ,GACT,EAAE;IACD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,SAAS,CAAC;CAC/C,2CAoCA"}