@object-ui/plugin-detail 3.3.0 → 3.3.1

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 (134) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/README.md +21 -1
  3. package/dist/AddressField-LgHnO2Lk.js +98 -0
  4. package/dist/AutoNumberField-xZCrU0eW.js +14 -0
  5. package/dist/{AvatarField-Xuieq0ZI.js → AvatarField-Dy2XGlPz.js} +16 -15
  6. package/dist/{BooleanField-DwfMKknK.js → BooleanField-C0Clfka5.js} +11 -10
  7. package/dist/CodeField-CHUa07B6.js +23 -0
  8. package/dist/ColorField-vxHqEhcS.js +38 -0
  9. package/dist/CurrencyField-DiWjYWDo.js +49 -0
  10. package/dist/DateField-DGaRPM4P.js +22 -0
  11. package/dist/DateTimeField-8QnpsI_h.js +30 -0
  12. package/dist/EmailField-CkVgMbpI.js +26 -0
  13. package/dist/FileField-5UPV7uek.js +149 -0
  14. package/dist/FormulaField-BUgt6-Pi.js +17 -0
  15. package/dist/GeolocationField-D9T_jgG6.js +118 -0
  16. package/dist/GridField-DE_HwiIN.js +49 -0
  17. package/dist/ImageField-Dswnqtzf.js +73 -0
  18. package/dist/LocationField-gjqbE6na.js +36 -0
  19. package/dist/LookupField-BcS3LRKc.js +901 -0
  20. package/dist/{MasterDetailField-B0HTmmD7.js → MasterDetailField-BF6_-X3A.js} +20 -19
  21. package/dist/NumberField-Dj2rYmrS.js +27 -0
  22. package/dist/ObjectField-BymIojwd.js +50 -0
  23. package/dist/{PasswordField-DVTimsc3.js → PasswordField-ED_Xgqz-.js} +8 -7
  24. package/dist/PercentField-D-JKOxKC.js +61 -0
  25. package/dist/PhoneField-DSCaGYq7.js +26 -0
  26. package/dist/QRCodeField-CtcOUapi.js +73 -0
  27. package/dist/{RatingField-rRi_P0N0.js → RatingField-BDnyQFWy.js} +10 -9
  28. package/dist/RichTextField-CH6LVZQA.js +33 -0
  29. package/dist/SelectField-DE4dpkMV.js +36 -0
  30. package/dist/{SignatureField-2CnhcWI0.js → SignatureField-B1wh3f5A.js} +18 -17
  31. package/dist/{SliderField-DEpMVXko.js → SliderField-zoTCKh9n.js} +2 -1
  32. package/dist/SummaryField-BeBVT6VN.js +22 -0
  33. package/dist/TextAreaField-rfUGrRxh.js +37 -0
  34. package/dist/TextField-C_yM7ATQ.js +30 -0
  35. package/dist/TimeField-BcQmBZi9.js +22 -0
  36. package/dist/UrlField-BakaF6NI.js +31 -0
  37. package/dist/UserField-zS7y3eKb.js +76 -0
  38. package/dist/VectorField-CTZ4myDM.js +34 -0
  39. package/dist/index.js +1912 -1728
  40. package/dist/index.umd.cjs +38 -47
  41. package/dist/packages/plugin-detail/src/DetailSection.d.ts.map +1 -1
  42. package/dist/packages/plugin-detail/src/DetailView.d.ts +24 -0
  43. package/dist/packages/plugin-detail/src/DetailView.d.ts.map +1 -1
  44. package/dist/packages/plugin-detail/src/RelatedList.d.ts +8 -0
  45. package/dist/packages/plugin-detail/src/RelatedList.d.ts.map +1 -1
  46. package/dist/packages/plugin-detail/src/useDetailTranslation.d.ts.map +1 -1
  47. package/dist/plugin-detail.css +1 -2
  48. package/dist/rolldown-runtime-DnwLefa7.js +23 -0
  49. package/dist/{src-C56Ly5uG.js → src-DyUKLvMN.js} +18271 -26636
  50. package/dist/{useFieldTranslation-CkxqyB82.js → useFieldTranslation-BRgjC1oq.js} +1 -1
  51. package/package.json +33 -11
  52. package/.turbo/turbo-build.log +0 -64
  53. package/dist/AddressField-CDLSeyNx.js +0 -93
  54. package/dist/AutoNumberField-CtE7suf5.js +0 -14
  55. package/dist/CodeField-CfwgRxx2.js +0 -22
  56. package/dist/ColorField-YKHA7dBD.js +0 -37
  57. package/dist/CurrencyField-tvS3fPAF.js +0 -51
  58. package/dist/DateField-BKqXpkOh.js +0 -21
  59. package/dist/DateTimeField-CR-nJCE7.js +0 -32
  60. package/dist/EmailField-CgvW1Qal.js +0 -28
  61. package/dist/FileField-BVAme2ML.js +0 -151
  62. package/dist/FormulaField-DamJ2VaG.js +0 -14
  63. package/dist/GeolocationField-C99z7ZBM.js +0 -113
  64. package/dist/GridField-C9JbpTx_.js +0 -51
  65. package/dist/ImageField-CDANtgVV.js +0 -75
  66. package/dist/LocationField-ZSyZ0O-h.js +0 -35
  67. package/dist/LookupField-B3hQJt95.js +0 -903
  68. package/dist/LookupField-D00z6gn_.js +0 -2
  69. package/dist/NumberField-DL2QAL7X.js +0 -26
  70. package/dist/ObjectField-JYvUnuRO.js +0 -52
  71. package/dist/PercentField-DjR6BSpw.js +0 -63
  72. package/dist/PhoneField-CX1JL-jp.js +0 -28
  73. package/dist/QRCodeField-CH_1pU6R.js +0 -72
  74. package/dist/RichTextField-CJqLWlrb.js +0 -32
  75. package/dist/SelectField-DGoDoRM_.js +0 -30
  76. package/dist/SelectField-XBVI50AD.js +0 -2
  77. package/dist/SummaryField-7ch9aqAu.js +0 -19
  78. package/dist/TextAreaField-Cmw1oXcw.js +0 -36
  79. package/dist/TextField-OTLa3p51.js +0 -29
  80. package/dist/TimeField-DKPoNWoR.js +0 -21
  81. package/dist/UrlField-CxbmzP9f.js +0 -33
  82. package/dist/UserField-ChvwUkMK.js +0 -78
  83. package/dist/VectorField-BVClL8Vw.js +0 -36
  84. package/src/ActivityTimeline.tsx +0 -184
  85. package/src/CommentAttachment.tsx +0 -194
  86. package/src/CommentInput.tsx +0 -81
  87. package/src/DetailSection.tsx +0 -340
  88. package/src/DetailTabs.tsx +0 -73
  89. package/src/DetailView.stories.tsx +0 -334
  90. package/src/DetailView.tsx +0 -823
  91. package/src/DiffView.tsx +0 -233
  92. package/src/FieldChangeItem.tsx +0 -46
  93. package/src/HeaderHighlight.tsx +0 -88
  94. package/src/InlineCreateRelated.tsx +0 -291
  95. package/src/MentionAutocomplete.tsx +0 -123
  96. package/src/PointInTimeRestore.tsx +0 -261
  97. package/src/ReactionPicker.tsx +0 -106
  98. package/src/RecordActivityTimeline.tsx +0 -433
  99. package/src/RecordChatterPanel.tsx +0 -209
  100. package/src/RecordComments.tsx +0 -217
  101. package/src/RecordNavigationEnhanced.tsx +0 -213
  102. package/src/RelatedList.tsx +0 -413
  103. package/src/RelationshipGraph.tsx +0 -286
  104. package/src/RichTextCommentInput.tsx +0 -350
  105. package/src/SectionGroup.tsx +0 -101
  106. package/src/SubscriptionToggle.tsx +0 -62
  107. package/src/ThreadedReplies.tsx +0 -163
  108. package/src/__tests__/ActivityTimeline.test.tsx +0 -119
  109. package/src/__tests__/ActivityTimelineFiltering.test.tsx +0 -143
  110. package/src/__tests__/CommentInput.test.tsx +0 -57
  111. package/src/__tests__/DetailSection.test.tsx +0 -490
  112. package/src/__tests__/DetailView.test.tsx +0 -694
  113. package/src/__tests__/FieldChangeItem.test.tsx +0 -119
  114. package/src/__tests__/HeaderHighlight.test.tsx +0 -213
  115. package/src/__tests__/MentionAutocomplete.test.tsx +0 -97
  116. package/src/__tests__/ReactionPicker.test.tsx +0 -113
  117. package/src/__tests__/RecordActivityTimeline.test.tsx +0 -395
  118. package/src/__tests__/RecordChatterPanel.test.tsx +0 -265
  119. package/src/__tests__/RecordComments.test.tsx +0 -96
  120. package/src/__tests__/RecordCommentsPinSearch.test.tsx +0 -133
  121. package/src/__tests__/RelatedList.test.tsx +0 -160
  122. package/src/__tests__/SectionGroup.test.tsx +0 -101
  123. package/src/__tests__/SubscriptionToggle.test.tsx +0 -84
  124. package/src/__tests__/ThreadedReplies.test.tsx +0 -212
  125. package/src/__tests__/autoLayout.test.ts +0 -228
  126. package/src/__tests__/phase12-features.test.tsx +0 -583
  127. package/src/__tests__/roadmap-features.test.tsx +0 -478
  128. package/src/autoLayout.ts +0 -128
  129. package/src/index.tsx +0 -149
  130. package/src/useDetailTranslation.ts +0 -183
  131. package/tsconfig.json +0 -18
  132. package/vite.config.ts +0 -57
  133. package/vitest.config.ts +0 -13
  134. package/vitest.setup.ts +0 -1
@@ -0,0 +1,118 @@
1
+ import { n as e } from "./rolldown-runtime-DnwLefa7.js";
2
+ import { Ft as t, O as n, k as r, q as i, t as a, yt as o } from "./src-DyUKLvMN.js";
3
+ import s from "react";
4
+ import { jsx as c, jsxs as l } from "react/jsx-runtime";
5
+ //#region ../fields/src/widgets/GeolocationField.tsx
6
+ var u = /* @__PURE__ */ e({ GeolocationField: () => d });
7
+ function d({ value: e, onChange: u, field: d, readonly: f, ...p }) {
8
+ let [m, h] = s.useState(!1), g = e || {}, _ = (e, t) => {
9
+ u({
10
+ ...g,
11
+ [e]: t ? Number(t) : void 0
12
+ });
13
+ }, v = () => {
14
+ if (!navigator.geolocation) {
15
+ console.error("Geolocation is not supported by this browser");
16
+ return;
17
+ }
18
+ h(!0), navigator.geolocation.getCurrentPosition((e) => {
19
+ u({
20
+ latitude: e.coords.latitude,
21
+ longitude: e.coords.longitude,
22
+ accuracy: e.coords.accuracy
23
+ }), h(!1);
24
+ }, (e) => {
25
+ console.error("Error getting location:", e.message), h(!1);
26
+ }, {
27
+ enableHighAccuracy: !0,
28
+ timeout: 5e3,
29
+ maximumAge: 0
30
+ });
31
+ }, y = (e) => !e.latitude || !e.longitude ? "" : `${e.latitude.toFixed(6)}, ${e.longitude.toFixed(6)}`, b = () => {
32
+ if (!g.latitude || !g.longitude) return;
33
+ let e = `https://www.google.com/maps?q=${g.latitude},${g.longitude}`;
34
+ window.open(e, "_blank");
35
+ };
36
+ if (f) {
37
+ let e = y(g);
38
+ return /* @__PURE__ */ l("div", {
39
+ className: "flex items-center gap-2",
40
+ children: [
41
+ /* @__PURE__ */ c(o, { className: "w-4 h-4 text-muted-foreground" }),
42
+ e ? /* @__PURE__ */ c("span", {
43
+ className: "text-sm",
44
+ children: e
45
+ }) : /* @__PURE__ */ c(a, {}),
46
+ g.latitude && g.longitude && /* @__PURE__ */ c(i, {
47
+ type: "button",
48
+ variant: "link",
49
+ size: "sm",
50
+ onClick: b,
51
+ className: "p-0 h-auto",
52
+ children: "View on map"
53
+ })
54
+ ]
55
+ });
56
+ }
57
+ return /* @__PURE__ */ l("div", {
58
+ className: "space-y-3",
59
+ children: [
60
+ /* @__PURE__ */ l("div", {
61
+ className: "flex items-center gap-2",
62
+ children: [/* @__PURE__ */ l(i, {
63
+ type: "button",
64
+ variant: "outline",
65
+ size: "sm",
66
+ onClick: v,
67
+ disabled: f || m,
68
+ children: [/* @__PURE__ */ c(t, { className: "w-4 h-4 mr-2" }), m ? "Getting location..." : "Use Current Location"]
69
+ }), g.latitude && g.longitude && /* @__PURE__ */ l(i, {
70
+ type: "button",
71
+ variant: "link",
72
+ size: "sm",
73
+ onClick: b,
74
+ children: [/* @__PURE__ */ c(o, { className: "w-4 h-4 mr-2" }), "View on map"]
75
+ })]
76
+ }),
77
+ /* @__PURE__ */ l("div", {
78
+ className: "grid grid-cols-2 gap-3",
79
+ children: [/* @__PURE__ */ l("div", { children: [/* @__PURE__ */ c(r, {
80
+ htmlFor: "latitude",
81
+ className: "text-xs",
82
+ children: "Latitude"
83
+ }), /* @__PURE__ */ c(n, {
84
+ id: "latitude",
85
+ type: "number",
86
+ value: g.latitude ?? "",
87
+ onChange: (e) => _("latitude", e.target.value),
88
+ placeholder: "37.7749",
89
+ disabled: f || p.disabled,
90
+ step: "any",
91
+ className: p.className
92
+ })] }), /* @__PURE__ */ l("div", { children: [/* @__PURE__ */ c(r, {
93
+ htmlFor: "longitude",
94
+ className: "text-xs",
95
+ children: "Longitude"
96
+ }), /* @__PURE__ */ c(n, {
97
+ id: "longitude",
98
+ type: "number",
99
+ value: g.longitude ?? "",
100
+ onChange: (e) => _("longitude", e.target.value),
101
+ placeholder: "-122.4194",
102
+ disabled: f || p.disabled,
103
+ step: "any"
104
+ })] })]
105
+ }),
106
+ g.accuracy && /* @__PURE__ */ l("p", {
107
+ className: "text-xs text-muted-foreground",
108
+ children: [
109
+ "Accuracy: ±",
110
+ g.accuracy.toFixed(0),
111
+ "m"
112
+ ]
113
+ })
114
+ ]
115
+ });
116
+ }
117
+ //#endregion
118
+ export { u as t };
@@ -0,0 +1,49 @@
1
+ import { n as e } from "./rolldown-runtime-DnwLefa7.js";
2
+ import { an as t, t as n } from "./src-DyUKLvMN.js";
3
+ import "react";
4
+ import { jsx as r, jsxs as i } from "react/jsx-runtime";
5
+ //#region ../fields/src/widgets/GridField.tsx
6
+ var a = /* @__PURE__ */ e({ GridField: () => o });
7
+ function o({ value: e, field: a, readonly: o, ...s }) {
8
+ let c = (a || s.schema)?.columns || [];
9
+ return !e || !Array.isArray(e) ? /* @__PURE__ */ r(n, {}) : o ? /* @__PURE__ */ r("div", {
10
+ className: t("text-sm", s.className),
11
+ children: /* @__PURE__ */ i("span", {
12
+ className: "text-foreground",
13
+ children: [e.length, " rows"]
14
+ })
15
+ }) : /* @__PURE__ */ i("div", {
16
+ className: t("border border-border rounded-lg overflow-hidden", s.className),
17
+ children: [/* @__PURE__ */ r("div", {
18
+ className: "overflow-auto max-h-60",
19
+ children: /* @__PURE__ */ i("table", {
20
+ className: "w-full text-sm",
21
+ children: [/* @__PURE__ */ r("thead", {
22
+ className: "bg-muted border-b border-border",
23
+ children: /* @__PURE__ */ r("tr", { children: c.map((e, t) => /* @__PURE__ */ r("th", {
24
+ className: "px-3 py-2 text-left text-xs font-medium text-muted-foreground",
25
+ children: e.label || e.name
26
+ }, t)) })
27
+ }), /* @__PURE__ */ r("tbody", {
28
+ className: "divide-y divide-border",
29
+ children: e.slice(0, 5).map((e, t) => /* @__PURE__ */ r("tr", {
30
+ className: "hover:bg-muted/50 transition-colors",
31
+ children: c.map((t, i) => /* @__PURE__ */ r("td", {
32
+ className: "px-3 py-2 text-foreground",
33
+ children: e[t.name] == null ? /* @__PURE__ */ r(n, {}) : String(e[t.name])
34
+ }, i))
35
+ }, t))
36
+ })]
37
+ })
38
+ }), e.length > 5 && /* @__PURE__ */ i("div", {
39
+ className: "bg-muted px-3 py-2 text-xs text-muted-foreground border-t border-border",
40
+ children: [
41
+ "Showing 5 of ",
42
+ e.length,
43
+ " rows"
44
+ ]
45
+ })]
46
+ });
47
+ }
48
+ //#endregion
49
+ export { a as t };
@@ -0,0 +1,73 @@
1
+ import { n as e } from "./rolldown-runtime-DnwLefa7.js";
2
+ import { Et as t, X as n, q as r, t as i } from "./src-DyUKLvMN.js";
3
+ import { useRef as a } from "react";
4
+ import { jsx as o, jsxs as s } from "react/jsx-runtime";
5
+ //#region ../fields/src/widgets/ImageField.tsx
6
+ var c = /* @__PURE__ */ e({ ImageField: () => l });
7
+ function l({ value: e, onChange: c, field: l, readonly: u, ...d }) {
8
+ let f = a(null), p = l || d.schema, m = p?.multiple || !1, h = p?.accept ? p.accept.join(",") : "image/*";
9
+ if (u) return e ? /* @__PURE__ */ o("div", {
10
+ className: "flex flex-wrap gap-2",
11
+ children: (Array.isArray(e) ? e : [e]).map((e, t) => /* @__PURE__ */ o("img", {
12
+ src: e.url || "",
13
+ alt: e.name || `Image ${t + 1}`,
14
+ className: "size-20 rounded-md object-cover border border-gray-200"
15
+ }, t))
16
+ }) : /* @__PURE__ */ o(i, {});
17
+ let g = e ? Array.isArray(e) ? e : [e] : [], _ = (e) => {
18
+ let t = Array.from(e.target.files || []);
19
+ if (t.length === 0) return;
20
+ let n = t.map((e) => ({
21
+ name: e.name,
22
+ original_name: e.name,
23
+ size: e.size,
24
+ mime_type: e.type,
25
+ url: URL.createObjectURL(e)
26
+ }));
27
+ c(m ? [...g, ...n] : n[0]);
28
+ }, v = (e) => {
29
+ if (m) {
30
+ let t = g.filter((t, n) => n !== e);
31
+ c(t.length > 0 ? t : null);
32
+ } else c(null);
33
+ };
34
+ return /* @__PURE__ */ s("div", {
35
+ className: d.className,
36
+ children: [/* @__PURE__ */ o("input", {
37
+ ref: f,
38
+ type: "file",
39
+ multiple: m,
40
+ accept: h,
41
+ onChange: _,
42
+ className: "hidden"
43
+ }), /* @__PURE__ */ s("div", {
44
+ className: "space-y-2",
45
+ children: [g.length > 0 && /* @__PURE__ */ o("div", {
46
+ className: "grid grid-cols-4 gap-2",
47
+ children: g.map((e, t) => /* @__PURE__ */ s("div", {
48
+ className: "relative group",
49
+ children: [/* @__PURE__ */ o("img", {
50
+ src: e.url || "",
51
+ alt: e.name || `Image ${t + 1}`,
52
+ className: "size-20 rounded-md object-cover border border-gray-200"
53
+ }), /* @__PURE__ */ o(r, {
54
+ type: "button",
55
+ variant: "destructive",
56
+ size: "sm",
57
+ onClick: () => v(t),
58
+ className: "absolute top-1 right-1 h-6 w-6 p-0 opacity-0 group-hover:opacity-100 transition-opacity",
59
+ children: /* @__PURE__ */ o(n, { className: "size-3" })
60
+ })]
61
+ }, t))
62
+ }), /* @__PURE__ */ s(r, {
63
+ type: "button",
64
+ variant: "outline",
65
+ onClick: () => f.current?.click(),
66
+ className: "w-full",
67
+ children: [/* @__PURE__ */ o(t, { className: "size-4 mr-2" }), g.length > 0 ? "Add More Images" : "Upload Image"]
68
+ })]
69
+ })]
70
+ });
71
+ }
72
+ //#endregion
73
+ export { c as t };
@@ -0,0 +1,36 @@
1
+ import { n as e } from "./rolldown-runtime-DnwLefa7.js";
2
+ import { O as t, t as n } from "./src-DyUKLvMN.js";
3
+ import "react";
4
+ import { jsx as r } from "react/jsx-runtime";
5
+ //#region ../fields/src/widgets/LocationField.tsx
6
+ var i = /* @__PURE__ */ e({ LocationField: () => a });
7
+ function a({ value: e, onChange: i, field: a, readonly: o, ...s }) {
8
+ let c = a || s.schema, l = e && typeof e == "object" ? `${e.latitude || 0}, ${e.longitude || 0}` : "";
9
+ return o ? /* @__PURE__ */ r("span", {
10
+ className: "text-sm",
11
+ children: l || /* @__PURE__ */ r(n, {})
12
+ }) : /* @__PURE__ */ r(t, {
13
+ type: "text",
14
+ value: l,
15
+ onChange: (e) => {
16
+ let t = e.target.value;
17
+ if (!t.trim()) {
18
+ i(null);
19
+ return;
20
+ }
21
+ let n = t.split(",").map((e) => e.trim());
22
+ if (n.length === 2) {
23
+ let e = parseFloat(n[0]), t = parseFloat(n[1]);
24
+ !isNaN(e) && !isNaN(t) && i({
25
+ latitude: e,
26
+ longitude: t
27
+ });
28
+ }
29
+ },
30
+ placeholder: c?.placeholder || "latitude, longitude",
31
+ disabled: o || s.disabled,
32
+ className: s.className
33
+ });
34
+ }
35
+ //#endregion
36
+ export { i as t };