@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.
- package/dist/AddressField-B6fPb2Fs.js +3 -0
- package/dist/AddressField-Ctsxkj35.cjs +1 -0
- package/dist/AutoNumberField-DXIYJfiB.js +3 -0
- package/dist/AutoNumberField-f76XU1bR.cjs +1 -0
- package/dist/AvatarField-BHpex3Wa.js +3 -0
- package/dist/AvatarField-CXOdYavl.cjs +1 -0
- package/dist/BooleanField-Bs0urhsx.js +3 -0
- package/dist/BooleanField-DeexI_O2.cjs +1 -0
- package/dist/CodeField-DDOMH8E8.cjs +1 -0
- package/dist/CodeField-tRACqngO.js +3 -0
- package/dist/ColorField-Bar6bOJw.js +3 -0
- package/dist/ColorField-CM9CxZ9h.cjs +1 -0
- package/dist/CurrencyField-CezTX_rA.cjs +1 -0
- package/dist/CurrencyField-D4VwXI9k.js +3 -0
- package/dist/DateField-DDUllj7w.cjs +1 -0
- package/dist/DateField-DjGiK6BH.js +3 -0
- package/dist/DateTimeField-DBh-dYdR.js +3 -0
- package/dist/DateTimeField-DDqgVN3b.cjs +1 -0
- package/dist/EmailField-B-3nY8Pr.cjs +1 -0
- package/dist/EmailField-Cp6yJlpH.js +3 -0
- package/dist/FileField-C1bcL7tu.cjs +1 -0
- package/dist/FileField-DUgt6ai3.js +3 -0
- package/dist/FormulaField-BLV1KgkQ.js +3 -0
- package/dist/FormulaField-CsbQIZ7S.cjs +1 -0
- package/dist/GeolocationField-BbIRH51u.js +3 -0
- package/dist/GeolocationField-UFu9VR-x.cjs +1 -0
- package/dist/GridField-2m74haE0.cjs +1 -0
- package/dist/GridField-O3Jd1NuJ.js +3 -0
- package/dist/ImageField-Cna7g6KL.cjs +1 -0
- package/dist/ImageField-rc1Nzcvb.js +3 -0
- package/dist/LocationField-DpRe9QlH.cjs +1 -0
- package/dist/LocationField-QZPPYo0J.js +3 -0
- package/dist/LookupField-BX4sK8NG.js +904 -0
- package/dist/LookupField-C9rPrHi_.cjs +1 -0
- package/dist/MasterDetailField-BXncIT1s.js +3 -0
- package/dist/MasterDetailField-TNP2825Z.cjs +1 -0
- package/dist/NumberField-DCHTzmDG.js +3 -0
- package/dist/NumberField-SqRwbcY8.cjs +1 -0
- package/dist/ObjectField-BEUHpn_X.js +3 -0
- package/dist/ObjectField-BWZwaFIG.cjs +1 -0
- package/dist/PasswordField-BZ_OeQyw.js +3 -0
- package/dist/PasswordField-kLp-ZyPm.cjs +1 -0
- package/dist/PercentField-B2t2knlc.js +3 -0
- package/dist/PercentField-BzhD6tQm.cjs +1 -0
- package/dist/PhoneField-CirvuysP.cjs +1 -0
- package/dist/PhoneField-CkrCFmcO.js +3 -0
- package/dist/QRCodeField-C4OOLCbE.cjs +1 -0
- package/dist/QRCodeField-CQoGow8y.js +3 -0
- package/dist/RatingField-CZG8SgQ8.cjs +1 -0
- package/dist/RatingField-DecDJkou.js +3 -0
- package/dist/RichTextField-Bog2i4NN.cjs +1 -0
- package/dist/RichTextField-b-8QbNCJ.js +3 -0
- package/dist/SelectField-CAa6c0cB.cjs +1 -0
- package/dist/SelectField-DMy5IxRc.js +3 -0
- package/dist/SignatureField-BvTPE7Dn.js +3 -0
- package/dist/SignatureField-jsb-0AYp.cjs +1 -0
- package/dist/SliderField-B7WvKFv7.js +3 -0
- package/dist/SliderField-DRjEJSxK.cjs +1 -0
- package/dist/SummaryField-DA16Edq3.cjs +1 -0
- package/dist/SummaryField-DVSVfKmY.js +3 -0
- package/dist/TextAreaField--ut87UiB.js +3 -0
- package/dist/TextAreaField-Cxp3DFC6.cjs +1 -0
- package/dist/TextField-CkEDGbkQ.js +3 -0
- package/dist/TextField-aLAzBaLZ.cjs +1 -0
- package/dist/TimeField-D0lF0y_I.cjs +1 -0
- package/dist/TimeField-DA_S6lQV.js +3 -0
- package/dist/UrlField-D0ugmD3f.cjs +1 -0
- package/dist/UrlField-DCnXHR1A.js +3 -0
- package/dist/UserField-DGlorzyG.cjs +1 -0
- package/dist/UserField-V0GmvyGV.js +3 -0
- package/dist/VectorField-BSD85ntU.cjs +1 -0
- package/dist/VectorField-CVi5yrrc.js +3 -0
- package/dist/fields/src/index.d.ts +1 -0
- package/dist/fields/src/record-picker-dialog.stories.d.ts +25 -0
- package/dist/fields/src/record-picker.test.d.ts +1 -0
- package/dist/fields/src/widgets/RecordPickerDialog.d.ts +166 -0
- package/dist/fields/src/widgets/_cell-renderer-bridge.d.ts +3 -0
- package/dist/index.cjs +4 -9
- package/dist/index.js +2229 -2850
- package/dist/jsx-runtime-DHCF5ANT.cjs +6 -0
- package/dist/jsx-runtime-MxADXuRH.js +189 -0
- package/package.json +7 -6
- package/src/index.tsx +6 -0
- package/src/record-picker-dialog.stories.tsx +160 -0
- package/src/record-picker.test.tsx +1696 -0
- package/src/widgets/LookupField.tsx +254 -150
- package/src/widgets/RecordPickerDialog.tsx +1182 -0
- 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
|
+
"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.
|
|
29
|
-
"@object-ui/core": "3.1.
|
|
30
|
-
"@object-ui/
|
|
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": "^
|
|
40
|
+
"@vitejs/plugin-react": "^6.0.1",
|
|
40
41
|
"typescript": "^5.9.3",
|
|
41
|
-
"vite": "^
|
|
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
|
+
};
|