@object-ui/fields 3.1.3 → 3.1.5

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 (88) hide show
  1. package/dist/AddressField-B6fPb2Fs.js +3 -0
  2. package/dist/AddressField-Ctsxkj35.cjs +1 -0
  3. package/dist/AutoNumberField-DXIYJfiB.js +3 -0
  4. package/dist/AutoNumberField-f76XU1bR.cjs +1 -0
  5. package/dist/AvatarField-BHpex3Wa.js +3 -0
  6. package/dist/AvatarField-CXOdYavl.cjs +1 -0
  7. package/dist/BooleanField-Bs0urhsx.js +3 -0
  8. package/dist/BooleanField-DeexI_O2.cjs +1 -0
  9. package/dist/CodeField-DDOMH8E8.cjs +1 -0
  10. package/dist/CodeField-tRACqngO.js +3 -0
  11. package/dist/ColorField-Bar6bOJw.js +3 -0
  12. package/dist/ColorField-CM9CxZ9h.cjs +1 -0
  13. package/dist/CurrencyField-CezTX_rA.cjs +1 -0
  14. package/dist/CurrencyField-D4VwXI9k.js +3 -0
  15. package/dist/DateField-DDUllj7w.cjs +1 -0
  16. package/dist/DateField-DjGiK6BH.js +3 -0
  17. package/dist/DateTimeField-DBh-dYdR.js +3 -0
  18. package/dist/DateTimeField-DDqgVN3b.cjs +1 -0
  19. package/dist/EmailField-B-3nY8Pr.cjs +1 -0
  20. package/dist/EmailField-Cp6yJlpH.js +3 -0
  21. package/dist/FileField-C1bcL7tu.cjs +1 -0
  22. package/dist/FileField-DUgt6ai3.js +3 -0
  23. package/dist/FormulaField-BLV1KgkQ.js +3 -0
  24. package/dist/FormulaField-CsbQIZ7S.cjs +1 -0
  25. package/dist/GeolocationField-BbIRH51u.js +3 -0
  26. package/dist/GeolocationField-UFu9VR-x.cjs +1 -0
  27. package/dist/GridField-2m74haE0.cjs +1 -0
  28. package/dist/GridField-O3Jd1NuJ.js +3 -0
  29. package/dist/ImageField-Cna7g6KL.cjs +1 -0
  30. package/dist/ImageField-rc1Nzcvb.js +3 -0
  31. package/dist/LocationField-DpRe9QlH.cjs +1 -0
  32. package/dist/LocationField-QZPPYo0J.js +3 -0
  33. package/dist/LookupField-BX4sK8NG.js +904 -0
  34. package/dist/LookupField-C9rPrHi_.cjs +1 -0
  35. package/dist/MasterDetailField-BXncIT1s.js +3 -0
  36. package/dist/MasterDetailField-TNP2825Z.cjs +1 -0
  37. package/dist/NumberField-DCHTzmDG.js +3 -0
  38. package/dist/NumberField-SqRwbcY8.cjs +1 -0
  39. package/dist/ObjectField-BEUHpn_X.js +3 -0
  40. package/dist/ObjectField-BWZwaFIG.cjs +1 -0
  41. package/dist/PasswordField-BZ_OeQyw.js +3 -0
  42. package/dist/PasswordField-kLp-ZyPm.cjs +1 -0
  43. package/dist/PercentField-B2t2knlc.js +3 -0
  44. package/dist/PercentField-BzhD6tQm.cjs +1 -0
  45. package/dist/PhoneField-CirvuysP.cjs +1 -0
  46. package/dist/PhoneField-CkrCFmcO.js +3 -0
  47. package/dist/QRCodeField-C4OOLCbE.cjs +1 -0
  48. package/dist/QRCodeField-CQoGow8y.js +3 -0
  49. package/dist/RatingField-CZG8SgQ8.cjs +1 -0
  50. package/dist/RatingField-DecDJkou.js +3 -0
  51. package/dist/RichTextField-Bog2i4NN.cjs +1 -0
  52. package/dist/RichTextField-b-8QbNCJ.js +3 -0
  53. package/dist/SelectField-CAa6c0cB.cjs +1 -0
  54. package/dist/SelectField-DMy5IxRc.js +3 -0
  55. package/dist/SignatureField-BvTPE7Dn.js +3 -0
  56. package/dist/SignatureField-jsb-0AYp.cjs +1 -0
  57. package/dist/SliderField-B7WvKFv7.js +3 -0
  58. package/dist/SliderField-DRjEJSxK.cjs +1 -0
  59. package/dist/SummaryField-DA16Edq3.cjs +1 -0
  60. package/dist/SummaryField-DVSVfKmY.js +3 -0
  61. package/dist/TextAreaField--ut87UiB.js +3 -0
  62. package/dist/TextAreaField-Cxp3DFC6.cjs +1 -0
  63. package/dist/TextField-CkEDGbkQ.js +3 -0
  64. package/dist/TextField-aLAzBaLZ.cjs +1 -0
  65. package/dist/TimeField-D0lF0y_I.cjs +1 -0
  66. package/dist/TimeField-DA_S6lQV.js +3 -0
  67. package/dist/UrlField-D0ugmD3f.cjs +1 -0
  68. package/dist/UrlField-DCnXHR1A.js +3 -0
  69. package/dist/UserField-DGlorzyG.cjs +1 -0
  70. package/dist/UserField-V0GmvyGV.js +3 -0
  71. package/dist/VectorField-BSD85ntU.cjs +1 -0
  72. package/dist/VectorField-CVi5yrrc.js +3 -0
  73. package/dist/fields/src/index.d.ts +1 -0
  74. package/dist/fields/src/record-picker-dialog.stories.d.ts +25 -0
  75. package/dist/fields/src/record-picker.test.d.ts +1 -0
  76. package/dist/fields/src/widgets/RecordPickerDialog.d.ts +166 -0
  77. package/dist/fields/src/widgets/_cell-renderer-bridge.d.ts +3 -0
  78. package/dist/index.cjs +4 -9
  79. package/dist/index.js +2229 -2850
  80. package/dist/jsx-runtime-DHCF5ANT.cjs +6 -0
  81. package/dist/jsx-runtime-MxADXuRH.js +189 -0
  82. package/package.json +7 -6
  83. package/src/index.tsx +6 -0
  84. package/src/record-picker-dialog.stories.tsx +160 -0
  85. package/src/record-picker.test.tsx +1696 -0
  86. package/src/widgets/LookupField.tsx +254 -150
  87. package/src/widgets/RecordPickerDialog.tsx +1182 -0
  88. package/src/widgets/_cell-renderer-bridge.ts +19 -0
@@ -0,0 +1,6 @@
1
+ var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),s=(e,n)=>{let r={};for(var i in e)t(r,i,{get:e[i],enumerable:!0});return n||t(r,Symbol.toStringTag,{value:`Module`}),r},c=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;l<u;l++)d=c[l],!a.call(e,d)&&d!==o&&t(e,d,{get:(e=>i[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},l=(n,r,a)=>(a=n==null?{}:e(i(n)),c(r||!n||!n.__esModule?t(a,`default`,{value:n,enumerable:!0}):a,n)),u=o((e=>{var t=Symbol.for(`react.transitional.element`),n=Symbol.for(`react.fragment`);function r(e,n,r){var i=null;if(r!==void 0&&(i=``+r),n.key!==void 0&&(i=``+n.key),`key`in n)for(var a in r={},n)a!==`key`&&(r[a]=n[a]);else r=n;return n=r.ref,{$$typeof:t,type:e,key:i,ref:n===void 0?null:n,props:r}}e.Fragment=n,e.jsx=r,e.jsxs=r})),d=o((e=>{process.env.NODE_ENV!==`production`&&(function(){function t(e){if(e==null)return null;if(typeof e==`function`)return e.$$typeof===O?null:e.displayName||e.name||null;if(typeof e==`string`)return e;switch(e){case _:return`Fragment`;case y:return`Profiler`;case v:return`StrictMode`;case C:return`Suspense`;case w:return`SuspenseList`;case D:return`Activity`}if(typeof e==`object`)switch(typeof e.tag==`number`&&console.error(`Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue.`),e.$$typeof){case g:return`Portal`;case x:return e.displayName||`Context`;case b:return(e._context.displayName||`Context`)+`.Consumer`;case S:var n=e.render;return e=e.displayName,e||=(e=n.displayName||n.name||``,e===``?`ForwardRef`:`ForwardRef(`+e+`)`),e;case T:return n=e.displayName||null,n===null?t(e.type)||`Memo`:n;case E:n=e._payload,e=e._init;try{return t(e(n))}catch{}}return null}function n(e){return``+e}function r(e){try{n(e);var t=!1}catch{t=!0}if(t){t=console;var r=t.error,i=typeof Symbol==`function`&&Symbol.toStringTag&&e[Symbol.toStringTag]||e.constructor.name||`Object`;return r.call(t,`The provided key is an unsupported type %s. This value must be coerced to a string before using it here.`,i),n(e)}}function i(e){if(e===_)return`<>`;if(typeof e==`object`&&e&&e.$$typeof===E)return`<...>`;try{var n=t(e);return n?`<`+n+`>`:`<...>`}catch{return`<...>`}}function a(){var e=k.A;return e===null?null:e.getOwner()}function o(){return Error(`react-stack-top-frame`)}function s(e){if(A.call(e,`key`)){var t=Object.getOwnPropertyDescriptor(e,`key`).get;if(t&&t.isReactWarning)return!1}return e.key!==void 0}function c(e,t){function n(){N||(N=!0,console.error("%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://react.dev/link/special-props)",t))}n.isReactWarning=!0,Object.defineProperty(e,`key`,{get:n,configurable:!0})}function l(){var e=t(this.type);return P[e]||(P[e]=!0,console.error(`Accessing element.ref was removed in React 19. ref is now a regular prop. It will be removed from the JSX Element type in a future release.`)),e=this.props.ref,e===void 0?null:e}function u(e,t,n,r,i,a){var o=n.ref;return e={$$typeof:h,type:e,key:t,props:n,_owner:r},(o===void 0?null:o)===null?Object.defineProperty(e,`ref`,{enumerable:!1,value:null}):Object.defineProperty(e,`ref`,{enumerable:!1,get:l}),e._store={},Object.defineProperty(e._store,`validated`,{configurable:!1,enumerable:!1,writable:!0,value:0}),Object.defineProperty(e,`_debugInfo`,{configurable:!1,enumerable:!1,writable:!0,value:null}),Object.defineProperty(e,`_debugStack`,{configurable:!1,enumerable:!1,writable:!0,value:i}),Object.defineProperty(e,`_debugTask`,{configurable:!1,enumerable:!1,writable:!0,value:a}),Object.freeze&&(Object.freeze(e.props),Object.freeze(e)),e}function d(e,n,i,o,l,d){var p=n.children;if(p!==void 0)if(o)if(j(p)){for(o=0;o<p.length;o++)f(p[o]);Object.freeze&&Object.freeze(p)}else console.error(`React.jsx: Static children should always be an array. You are likely explicitly calling React.jsxs or React.jsxDEV. Use the Babel transform instead.`);else f(p);if(A.call(n,`key`)){p=t(e);var m=Object.keys(n).filter(function(e){return e!==`key`});o=0<m.length?`{key: someKey, `+m.join(`: ..., `)+`: ...}`:`{key: someKey}`,L[p+o]||(m=0<m.length?`{`+m.join(`: ..., `)+`: ...}`:`{}`,console.error(`A props object containing a "key" prop is being spread into JSX:
2
+ let props = %s;
3
+ <%s {...props} />
4
+ React keys must be passed directly to JSX without using spread:
5
+ let props = %s;
6
+ <%s key={someKey} {...props} />`,o,p,m,p),L[p+o]=!0)}if(p=null,i!==void 0&&(r(i),p=``+i),s(n)&&(r(n.key),p=``+n.key),`key`in n)for(var h in i={},n)h!==`key`&&(i[h]=n[h]);else i=n;return p&&c(i,typeof e==`function`?e.displayName||e.name||`Unknown`:e),u(e,p,i,a(),l,d)}function f(e){p(e)?e._store&&(e._store.validated=1):typeof e==`object`&&e&&e.$$typeof===E&&(e._payload.status===`fulfilled`?p(e._payload.value)&&e._payload.value._store&&(e._payload.value._store.validated=1):e._store&&(e._store.validated=1))}function p(e){return typeof e==`object`&&!!e&&e.$$typeof===h}var m=require(`react`),h=Symbol.for(`react.transitional.element`),g=Symbol.for(`react.portal`),_=Symbol.for(`react.fragment`),v=Symbol.for(`react.strict_mode`),y=Symbol.for(`react.profiler`),b=Symbol.for(`react.consumer`),x=Symbol.for(`react.context`),S=Symbol.for(`react.forward_ref`),C=Symbol.for(`react.suspense`),w=Symbol.for(`react.suspense_list`),T=Symbol.for(`react.memo`),E=Symbol.for(`react.lazy`),D=Symbol.for(`react.activity`),O=Symbol.for(`react.client.reference`),k=m.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,A=Object.prototype.hasOwnProperty,j=Array.isArray,M=console.createTask?console.createTask:function(){return null};m={react_stack_bottom_frame:function(e){return e()}};var N,P={},F=m.react_stack_bottom_frame.bind(m,o)(),I=M(i(o)),L={};e.Fragment=_,e.jsx=function(e,t,n){var r=1e4>k.recentlyCreatedOwnerStacks++;return d(e,t,n,!1,r?Error(`react-stack-top-frame`):F,r?M(i(e)):I)},e.jsxs=function(e,t,n){var r=1e4>k.recentlyCreatedOwnerStacks++;return d(e,t,n,!0,r?Error(`react-stack-top-frame`):F,r?M(i(e)):I)}})()})),f=o(((e,t)=>{process.env.NODE_ENV===`production`?t.exports=u():t.exports=d()}));Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return s}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return l}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return f}});
@@ -0,0 +1,189 @@
1
+ //#region \0rolldown/runtime.js
2
+ var e = Object.defineProperty, t = (e, t) => () => (t || e((t = { exports: {} }).exports, t), t.exports), n = (t, n) => {
3
+ let r = {};
4
+ for (var i in t) e(r, i, {
5
+ get: t[i],
6
+ enumerable: !0
7
+ });
8
+ return n || e(r, Symbol.toStringTag, { value: "Module" }), r;
9
+ }, r = /* @__PURE__ */ ((e) => typeof require < "u" ? require : typeof Proxy < "u" ? new Proxy(e, { get: (e, t) => (typeof require < "u" ? require : e)[t] }) : e)(function(e) {
10
+ if (typeof require < "u") return require.apply(this, arguments);
11
+ throw Error("Calling `require` for \"" + e + "\" in an environment that doesn't expose the `require` function. See https://rolldown.rs/in-depth/bundling-cjs#require-external-modules for more details.");
12
+ }), i = /* @__PURE__ */ t(((e) => {
13
+ var t = Symbol.for("react.transitional.element"), n = Symbol.for("react.fragment");
14
+ function r(e, n, r) {
15
+ var i = null;
16
+ if (r !== void 0 && (i = "" + r), n.key !== void 0 && (i = "" + n.key), "key" in n) for (var a in r = {}, n) a !== "key" && (r[a] = n[a]);
17
+ else r = n;
18
+ return n = r.ref, {
19
+ $$typeof: t,
20
+ type: e,
21
+ key: i,
22
+ ref: n === void 0 ? null : n,
23
+ props: r
24
+ };
25
+ }
26
+ e.Fragment = n, e.jsx = r, e.jsxs = r;
27
+ })), a = /* @__PURE__ */ t(((e) => {
28
+ process.env.NODE_ENV !== "production" && (function() {
29
+ function t(e) {
30
+ if (e == null) return null;
31
+ if (typeof e == "function") return e.$$typeof === k ? null : e.displayName || e.name || null;
32
+ if (typeof e == "string") return e;
33
+ switch (e) {
34
+ case v: return "Fragment";
35
+ case b: return "Profiler";
36
+ case y: return "StrictMode";
37
+ case w: return "Suspense";
38
+ case T: return "SuspenseList";
39
+ case O: return "Activity";
40
+ }
41
+ if (typeof e == "object") switch (typeof e.tag == "number" && console.error("Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue."), e.$$typeof) {
42
+ case _: return "Portal";
43
+ case S: return e.displayName || "Context";
44
+ case x: return (e._context.displayName || "Context") + ".Consumer";
45
+ case C:
46
+ var n = e.render;
47
+ return e = e.displayName, e ||= (e = n.displayName || n.name || "", e === "" ? "ForwardRef" : "ForwardRef(" + e + ")"), e;
48
+ case E: return n = e.displayName || null, n === null ? t(e.type) || "Memo" : n;
49
+ case D:
50
+ n = e._payload, e = e._init;
51
+ try {
52
+ return t(e(n));
53
+ } catch {}
54
+ }
55
+ return null;
56
+ }
57
+ function n(e) {
58
+ return "" + e;
59
+ }
60
+ function i(e) {
61
+ try {
62
+ n(e);
63
+ var t = !1;
64
+ } catch {
65
+ t = !0;
66
+ }
67
+ if (t) {
68
+ t = console;
69
+ var r = t.error, i = typeof Symbol == "function" && Symbol.toStringTag && e[Symbol.toStringTag] || e.constructor.name || "Object";
70
+ return r.call(t, "The provided key is an unsupported type %s. This value must be coerced to a string before using it here.", i), n(e);
71
+ }
72
+ }
73
+ function a(e) {
74
+ if (e === v) return "<>";
75
+ if (typeof e == "object" && e && e.$$typeof === D) return "<...>";
76
+ try {
77
+ var n = t(e);
78
+ return n ? "<" + n + ">" : "<...>";
79
+ } catch {
80
+ return "<...>";
81
+ }
82
+ }
83
+ function o() {
84
+ var e = A.A;
85
+ return e === null ? null : e.getOwner();
86
+ }
87
+ function s() {
88
+ return Error("react-stack-top-frame");
89
+ }
90
+ function c(e) {
91
+ if (j.call(e, "key")) {
92
+ var t = Object.getOwnPropertyDescriptor(e, "key").get;
93
+ if (t && t.isReactWarning) return !1;
94
+ }
95
+ return e.key !== void 0;
96
+ }
97
+ function l(e, t) {
98
+ function n() {
99
+ P || (P = !0, console.error("%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://react.dev/link/special-props)", t));
100
+ }
101
+ n.isReactWarning = !0, Object.defineProperty(e, "key", {
102
+ get: n,
103
+ configurable: !0
104
+ });
105
+ }
106
+ function u() {
107
+ var e = t(this.type);
108
+ return F[e] || (F[e] = !0, console.error("Accessing element.ref was removed in React 19. ref is now a regular prop. It will be removed from the JSX Element type in a future release.")), e = this.props.ref, e === void 0 ? null : e;
109
+ }
110
+ function d(e, t, n, r, i, a) {
111
+ var o = n.ref;
112
+ return e = {
113
+ $$typeof: g,
114
+ type: e,
115
+ key: t,
116
+ props: n,
117
+ _owner: r
118
+ }, (o === void 0 ? null : o) === null ? Object.defineProperty(e, "ref", {
119
+ enumerable: !1,
120
+ value: null
121
+ }) : Object.defineProperty(e, "ref", {
122
+ enumerable: !1,
123
+ get: u
124
+ }), e._store = {}, Object.defineProperty(e._store, "validated", {
125
+ configurable: !1,
126
+ enumerable: !1,
127
+ writable: !0,
128
+ value: 0
129
+ }), Object.defineProperty(e, "_debugInfo", {
130
+ configurable: !1,
131
+ enumerable: !1,
132
+ writable: !0,
133
+ value: null
134
+ }), Object.defineProperty(e, "_debugStack", {
135
+ configurable: !1,
136
+ enumerable: !1,
137
+ writable: !0,
138
+ value: i
139
+ }), Object.defineProperty(e, "_debugTask", {
140
+ configurable: !1,
141
+ enumerable: !1,
142
+ writable: !0,
143
+ value: a
144
+ }), Object.freeze && (Object.freeze(e.props), Object.freeze(e)), e;
145
+ }
146
+ function f(e, n, r, a, s, u) {
147
+ var f = n.children;
148
+ if (f !== void 0) if (a) if (M(f)) {
149
+ for (a = 0; a < f.length; a++) p(f[a]);
150
+ Object.freeze && Object.freeze(f);
151
+ } else console.error("React.jsx: Static children should always be an array. You are likely explicitly calling React.jsxs or React.jsxDEV. Use the Babel transform instead.");
152
+ else p(f);
153
+ if (j.call(n, "key")) {
154
+ f = t(e);
155
+ var m = Object.keys(n).filter(function(e) {
156
+ return e !== "key";
157
+ });
158
+ a = 0 < m.length ? "{key: someKey, " + m.join(": ..., ") + ": ...}" : "{key: someKey}", R[f + a] || (m = 0 < m.length ? "{" + m.join(": ..., ") + ": ...}" : "{}", console.error("A props object containing a \"key\" prop is being spread into JSX:\n let props = %s;\n <%s {...props} />\nReact keys must be passed directly to JSX without using spread:\n let props = %s;\n <%s key={someKey} {...props} />", a, f, m, f), R[f + a] = !0);
159
+ }
160
+ if (f = null, r !== void 0 && (i(r), f = "" + r), c(n) && (i(n.key), f = "" + n.key), "key" in n) for (var h in r = {}, n) h !== "key" && (r[h] = n[h]);
161
+ else r = n;
162
+ return f && l(r, typeof e == "function" ? e.displayName || e.name || "Unknown" : e), d(e, f, r, o(), s, u);
163
+ }
164
+ function p(e) {
165
+ m(e) ? e._store && (e._store.validated = 1) : typeof e == "object" && e && e.$$typeof === D && (e._payload.status === "fulfilled" ? m(e._payload.value) && e._payload.value._store && (e._payload.value._store.validated = 1) : e._store && (e._store.validated = 1));
166
+ }
167
+ function m(e) {
168
+ return typeof e == "object" && !!e && e.$$typeof === g;
169
+ }
170
+ var h = r("react"), g = Symbol.for("react.transitional.element"), _ = Symbol.for("react.portal"), v = Symbol.for("react.fragment"), y = Symbol.for("react.strict_mode"), b = Symbol.for("react.profiler"), x = Symbol.for("react.consumer"), S = Symbol.for("react.context"), C = Symbol.for("react.forward_ref"), w = Symbol.for("react.suspense"), T = Symbol.for("react.suspense_list"), E = Symbol.for("react.memo"), D = Symbol.for("react.lazy"), O = Symbol.for("react.activity"), k = Symbol.for("react.client.reference"), A = h.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE, j = Object.prototype.hasOwnProperty, M = Array.isArray, N = console.createTask ? console.createTask : function() {
171
+ return null;
172
+ };
173
+ h = { react_stack_bottom_frame: function(e) {
174
+ return e();
175
+ } };
176
+ var P, F = {}, I = h.react_stack_bottom_frame.bind(h, s)(), L = N(a(s)), R = {};
177
+ e.Fragment = v, e.jsx = function(e, t, n) {
178
+ var r = 1e4 > A.recentlyCreatedOwnerStacks++;
179
+ return f(e, t, n, !1, r ? Error("react-stack-top-frame") : I, r ? N(a(e)) : L);
180
+ }, e.jsxs = function(e, t, n) {
181
+ var r = 1e4 > A.recentlyCreatedOwnerStacks++;
182
+ return f(e, t, n, !0, r ? Error("react-stack-top-frame") : I, r ? N(a(e)) : L);
183
+ };
184
+ })();
185
+ })), o = /* @__PURE__ */ t(((e, t) => {
186
+ process.env.NODE_ENV === "production" ? t.exports = i() : t.exports = a();
187
+ }));
188
+ //#endregion
189
+ export { n, o as t };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@object-ui/fields",
3
- "version": "3.1.3",
3
+ "version": "3.1.5",
4
4
  "description": "Field renderers and registry for Object UI",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -25,9 +25,10 @@
25
25
  "clsx": "^2.1.1",
26
26
  "lucide-react": "^0.577.0",
27
27
  "tailwind-merge": "^3.5.0",
28
- "@object-ui/components": "3.1.3",
29
- "@object-ui/core": "3.1.3",
30
- "@object-ui/types": "3.1.3"
28
+ "@object-ui/components": "3.1.5",
29
+ "@object-ui/core": "3.1.5",
30
+ "@object-ui/react": "3.1.5",
31
+ "@object-ui/types": "3.1.5"
31
32
  },
32
33
  "peerDependencies": {
33
34
  "react": "^18.0.0 || ^19.0.0",
@@ -36,9 +37,9 @@
36
37
  "devDependencies": {
37
38
  "@types/react": "19.2.14",
38
39
  "@types/react-dom": "19.2.3",
39
- "@vitejs/plugin-react": "^5.1.4",
40
+ "@vitejs/plugin-react": "^6.0.1",
40
41
  "typescript": "^5.9.3",
41
- "vite": "^7.3.1",
42
+ "vite": "^8.0.1",
42
43
  "vite-plugin-dts": "^4.5.4"
43
44
  },
44
45
  "publishConfig": {
package/src/index.tsx CHANGED
@@ -888,6 +888,11 @@ registerFieldRenderer('status', SelectCellRenderer);
888
888
  registerFieldRenderer('user', UserCellRenderer);
889
889
  registerFieldRenderer('owner', UserCellRenderer);
890
890
 
891
+ // Register getCellRenderer in the bridge so RecordPickerDialog can access it
892
+ // via LookupField without circular imports.
893
+ import { setCellRendererResolver } from './widgets/_cell-renderer-bridge';
894
+ setCellRendererResolver(getCellRenderer);
895
+
891
896
 
892
897
 
893
898
  /**
@@ -1327,6 +1332,7 @@ export * from './widgets/PasswordField';
1327
1332
  export * from './widgets/TextAreaField';
1328
1333
  export * from './widgets/RichTextField';
1329
1334
  export * from './widgets/LookupField';
1335
+ export * from './widgets/RecordPickerDialog';
1330
1336
  export * from './widgets/FileField';
1331
1337
  export * from './widgets/ImageField';
1332
1338
  export * from './widgets/LocationField';
@@ -0,0 +1,160 @@
1
+ import type { Meta, StoryObj } from '@storybook/react';
2
+ import React, { useState } from 'react';
3
+ import { RecordPickerDialog } from './widgets/RecordPickerDialog';
4
+ import type { DataSource } from '@object-ui/types';
5
+
6
+ /**
7
+ * **RecordPickerDialog** — Enterprise-grade record picker for lookup fields.
8
+ *
9
+ * Features: skeleton loading, sticky table header, column sort,
10
+ * keyboard navigation, page jump, inline filter bar, column resize,
11
+ * and responsive layout.
12
+ */
13
+ const meta = {
14
+ title: 'Fields/RecordPickerDialog',
15
+ component: RecordPickerDialog,
16
+ parameters: {
17
+ layout: 'centered',
18
+ },
19
+ tags: ['autodocs'],
20
+ } satisfies Meta<typeof RecordPickerDialog>;
21
+
22
+ export default meta;
23
+ type Story = StoryObj<typeof RecordPickerDialog>;
24
+
25
+ /* ------------------------------------------------------------------ */
26
+ /* Mock data used by all stories */
27
+ /* ------------------------------------------------------------------ */
28
+
29
+ const MOCK_ORDERS = [
30
+ { id: '1', order_number: 'ORD-2024-001', amount: 15459.99, status: 'Paid', order_date: '2024-01-15' },
31
+ { id: '2', order_number: 'ORD-2024-002', amount: 289.50, status: 'Pending', order_date: '2024-01-18' },
32
+ { id: '3', order_number: 'ORD-2024-003', amount: 5549.99, status: 'Shipped', order_date: '2024-02-05' },
33
+ { id: '4', order_number: 'ORD-2024-004', amount: 42500.00, status: 'Delivered', order_date: '2024-02-20' },
34
+ { id: '5', order_number: 'ORD-2024-005', amount: 1250.00, status: 'Draft', order_date: '2024-03-01' },
35
+ { id: '6', order_number: 'ORD-2024-006', amount: 8999.94, status: 'Paid', order_date: '2024-03-15' },
36
+ { id: '7', order_number: 'ORD-2024-007', amount: 3200.00, status: 'Shipped', order_date: '2024-04-02' },
37
+ { id: '8', order_number: 'ORD-2024-008', amount: 750.00, status: 'Pending', order_date: '2024-04-10' },
38
+ { id: '9', order_number: 'ORD-2024-009', amount: 19800.00, status: 'Delivered', order_date: '2024-04-22' },
39
+ { id: '10', order_number: 'ORD-2024-010', amount: 4500.00, status: 'Paid', order_date: '2024-05-01' },
40
+ { id: '11', order_number: 'ORD-2024-011', amount: 670.00, status: 'Draft', order_date: '2024-05-08' },
41
+ { id: '12', order_number: 'ORD-2024-012', amount: 12345.67, status: 'Shipped', order_date: '2024-05-15' },
42
+ ];
43
+
44
+ /** Simulate async DataSource.find with pagination + search */
45
+ function createMockDataSource(): DataSource {
46
+ return {
47
+ find: async (_objectName: string, params: any) => {
48
+ await new Promise(r => setTimeout(r, 400)); // simulate latency
49
+ let data = [...MOCK_ORDERS];
50
+
51
+ // Search filter
52
+ if (params?.$search) {
53
+ const q = params.$search.toLowerCase();
54
+ data = data.filter(
55
+ r =>
56
+ r.order_number.toLowerCase().includes(q) ||
57
+ r.status.toLowerCase().includes(q),
58
+ );
59
+ }
60
+
61
+ // Sort
62
+ if (params?.$orderby) {
63
+ const entries = Object.entries(params.$orderby);
64
+ if (entries.length > 0) {
65
+ const [field, dir] = entries[0] as [string, string];
66
+ data.sort((a: any, b: any) => {
67
+ if (a[field] < b[field]) return dir === 'asc' ? -1 : 1;
68
+ if (a[field] > b[field]) return dir === 'asc' ? 1 : -1;
69
+ return 0;
70
+ });
71
+ }
72
+ }
73
+
74
+ const total = data.length;
75
+ const skip = params?.$skip ?? 0;
76
+ const top = params?.$top ?? 10;
77
+ return { data: data.slice(skip, skip + top), total };
78
+ },
79
+ findOne: async () => null,
80
+ create: async () => ({}),
81
+ update: async () => ({}),
82
+ delete: async () => ({}),
83
+ } as unknown as DataSource;
84
+ }
85
+
86
+ /* ------------------------------------------------------------------ */
87
+ /* Story wrapper — opens the dialog inside a button toggle */
88
+ /* ------------------------------------------------------------------ */
89
+
90
+ function DialogDemo(props: Partial<React.ComponentProps<typeof RecordPickerDialog>>) {
91
+ const [open, setOpen] = useState(true);
92
+ const [selected, setSelected] = useState<any>(undefined);
93
+ const ds = React.useMemo(() => createMockDataSource(), []);
94
+
95
+ return (
96
+ <div className="flex flex-col items-center gap-4 p-6">
97
+ <button
98
+ className="rounded-md bg-primary px-4 py-2 text-sm text-primary-foreground shadow"
99
+ onClick={() => setOpen(true)}
100
+ type="button"
101
+ >
102
+ Open Record Picker
103
+ </button>
104
+ {selected && (
105
+ <p className="text-sm text-muted-foreground">
106
+ Selected: <code className="font-mono text-foreground">{JSON.stringify(selected)}</code>
107
+ </p>
108
+ )}
109
+ <RecordPickerDialog
110
+ open={open}
111
+ onOpenChange={setOpen}
112
+ title="Order"
113
+ dataSource={ds}
114
+ objectName="orders"
115
+ columns={[
116
+ { field: 'order_number', label: 'Order Number' },
117
+ { field: 'amount', label: 'Amount' },
118
+ { field: 'status', label: 'Status' },
119
+ { field: 'order_date', label: 'Order Date' },
120
+ ]}
121
+ displayField="order_number"
122
+ pageSize={5}
123
+ onSelect={(v: any) => setSelected(v)}
124
+ {...props}
125
+ />
126
+ </div>
127
+ );
128
+ }
129
+
130
+ /* ------------------------------------------------------------------ */
131
+ /* Stories */
132
+ /* ------------------------------------------------------------------ */
133
+
134
+ /** Default single-select dialog with 4 columns, pagination, and search. */
135
+ export const Default: Story = {
136
+ render: () => <DialogDemo />,
137
+ };
138
+
139
+ /** Multi-select mode with confirm/cancel footer. */
140
+ export const MultiSelect: Story = {
141
+ render: () => <DialogDemo multiple />,
142
+ };
143
+
144
+ /** With inline filter columns for interactive filtering. */
145
+ export const WithFilters: Story = {
146
+ render: () => (
147
+ <DialogDemo
148
+ filterColumns={[
149
+ { field: 'status', label: 'Status', type: 'select', options: [
150
+ { label: 'Paid', value: 'Paid' },
151
+ { label: 'Pending', value: 'Pending' },
152
+ { label: 'Shipped', value: 'Shipped' },
153
+ { label: 'Delivered', value: 'Delivered' },
154
+ { label: 'Draft', value: 'Draft' },
155
+ ]},
156
+ { field: 'order_number', label: 'Order Number', type: 'text' },
157
+ ]}
158
+ />
159
+ ),
160
+ };