@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
@@ -1,334 +0,0 @@
1
- import type { Meta, StoryObj } from '@storybook/react';
2
- import { SchemaRenderer } from '@object-ui/react';
3
- import type { BaseSchema } from '@object-ui/types';
4
- import { Building2, User } from 'lucide-react';
5
-
6
- const meta = {
7
- title: 'Plugins/DetailView',
8
- component: SchemaRenderer,
9
- parameters: {
10
- layout: 'padded',
11
- docs: {
12
- description: {
13
- component: 'Enhanced detail view component with Airtable-inspired features: tooltips, functional menus, collapsible sections, and copy-to-clipboard.',
14
- },
15
- },
16
- },
17
- tags: ['autodocs'],
18
- argTypes: {
19
- schema: { table: { disable: true } },
20
- },
21
- } satisfies Meta<any>;
22
-
23
- export default meta;
24
- type Story = StoryObj<typeof meta>;
25
-
26
- const renderStory = (args: any) => <SchemaRenderer schema={args as unknown as BaseSchema} />;
27
-
28
- export const Default: Story = {
29
- render: renderStory,
30
- args: {
31
- type: 'detail-view',
32
- title: 'Employee Details',
33
- data: {
34
- name: 'Sarah Connor',
35
- email: 'sarah.connor@example.com',
36
- phone: '+1 (555) 867-5309',
37
- department: 'Engineering',
38
- role: 'Tech Lead',
39
- location: 'Austin, TX',
40
- },
41
- fields: [
42
- { name: 'name', label: 'Full Name' },
43
- { name: 'email', label: 'Email' },
44
- { name: 'phone', label: 'Phone' },
45
- { name: 'department', label: 'Department' },
46
- { name: 'role', label: 'Role' },
47
- { name: 'location', label: 'Location' },
48
- ],
49
- showBack: true,
50
- showEdit: true,
51
- showDelete: true,
52
- } as any,
53
- };
54
-
55
- export const WithSections: Story = {
56
- render: renderStory,
57
- args: {
58
- type: 'detail-view',
59
- title: 'Account: TechCorp Inc.',
60
- data: {
61
- name: 'TechCorp Inc.',
62
- industry: 'Software',
63
- website: 'https://techcorp.io',
64
- employees: '200-500',
65
- revenue: '$25M - $50M',
66
- street: '456 Innovation Blvd',
67
- city: 'Seattle',
68
- state: 'WA',
69
- zipcode: '98101',
70
- country: 'USA',
71
- },
72
- sections: [
73
- {
74
- title: 'Company Info',
75
- icon: '🏢',
76
- fields: [
77
- { name: 'name', label: 'Company Name' },
78
- { name: 'industry', label: 'Industry' },
79
- { name: 'website', label: 'Website' },
80
- { name: 'employees', label: 'Employees' },
81
- { name: 'revenue', label: 'Annual Revenue' },
82
- ],
83
- columns: 2,
84
- },
85
- {
86
- title: 'Address',
87
- icon: '📍',
88
- collapsible: true,
89
- fields: [
90
- { name: 'street', label: 'Street' },
91
- { name: 'city', label: 'City' },
92
- { name: 'state', label: 'State' },
93
- { name: 'zipcode', label: 'Zip Code' },
94
- { name: 'country', label: 'Country' },
95
- ],
96
- columns: 2,
97
- },
98
- ],
99
- showBack: true,
100
- showEdit: true,
101
- showDelete: true,
102
- } as any,
103
- };
104
-
105
- export const WithRelatedLists: Story = {
106
- render: renderStory,
107
- args: {
108
- type: 'detail-view',
109
- title: 'Account: TechCorp Inc.',
110
- data: {
111
- name: 'TechCorp Inc.',
112
- industry: 'Software',
113
- },
114
- fields: [
115
- { name: 'name', label: 'Account Name' },
116
- { name: 'industry', label: 'Industry' },
117
- ],
118
- related: [
119
- {
120
- title: 'Contacts',
121
- type: 'table',
122
- data: [
123
- { id: '1', name: 'Mike Ross', email: 'mike@techcorp.io', title: 'VP Engineering' },
124
- { id: '2', name: 'Lisa Chen', email: 'lisa@techcorp.io', title: 'Product Manager' },
125
- ],
126
- columns: ['name', 'email', 'title'],
127
- },
128
- {
129
- title: 'Opportunities',
130
- type: 'table',
131
- data: [
132
- { id: '1', name: 'Enterprise License', amount: '$120,000', stage: 'Negotiation' },
133
- { id: '2', name: 'Support Contract', amount: '$45,000', stage: 'Proposal' },
134
- ],
135
- columns: ['name', 'amount', 'stage'],
136
- },
137
- ],
138
- showBack: true,
139
- showEdit: true,
140
- showDelete: true,
141
- } as any,
142
- };
143
-
144
- /**
145
- * Enhanced view showcasing new Airtable-inspired features
146
- */
147
- export const EnhancedAirtableStyle: Story = {
148
- render: renderStory,
149
- args: {
150
- type: 'detail-view',
151
- title: 'Sarah Johnson',
152
- objectName: 'Contact',
153
- resourceId: 'CNT-001',
154
- showEdit: true,
155
- showDelete: true,
156
- showBack: true,
157
- data: {
158
- name: 'Sarah Johnson',
159
- email: 'sarah.johnson@example.com',
160
- phone: '+1 (555) 123-4567',
161
- company: 'Acme Corporation',
162
- title: 'Senior Product Manager',
163
- department: 'Product',
164
- location: 'San Francisco, CA',
165
- website: 'https://example.com',
166
- notes: 'Key decision maker for enterprise deals. Prefers email communication.',
167
- linkedin: 'linkedin.com/in/sarahjohnson',
168
- twitter: '@sarahjohnson',
169
- status: 'Active',
170
- lead_source: 'Website',
171
- },
172
- sections: [
173
- {
174
- title: 'Contact Information',
175
- description: 'Primary contact details',
176
- collapsible: false,
177
- columns: 2,
178
- fields: [
179
- { name: 'email', label: 'Email' },
180
- { name: 'phone', label: 'Phone' },
181
- { name: 'title', label: 'Job Title' },
182
- { name: 'department', label: 'Department' },
183
- { name: 'location', label: 'Location' },
184
- { name: 'website', label: 'Website' },
185
- ],
186
- },
187
- {
188
- title: 'Company Details',
189
- collapsible: true,
190
- defaultCollapsed: false,
191
- columns: 2,
192
- fields: [
193
- { name: 'company', label: 'Company Name' },
194
- { name: 'status', label: 'Status' },
195
- { name: 'lead_source', label: 'Lead Source' },
196
- ],
197
- },
198
- {
199
- title: 'Social Media',
200
- collapsible: true,
201
- defaultCollapsed: true,
202
- columns: 1,
203
- fields: [
204
- { name: 'linkedin', label: 'LinkedIn' },
205
- { name: 'twitter', label: 'Twitter' },
206
- ],
207
- },
208
- ],
209
- } as any,
210
- };
211
-
212
- /**
213
- * View with field count badges in section headers
214
- */
215
- export const WithFieldCounts: Story = {
216
- render: renderStory,
217
- args: {
218
- type: 'detail-view',
219
- title: 'Deal Overview',
220
- objectName: 'Deal',
221
- resourceId: 'DEAL-456',
222
- showEdit: true,
223
- data: {
224
- name: 'Enterprise License',
225
- amount: '$120,000',
226
- stage: 'Negotiation',
227
- probability: '75%',
228
- close_date: '2024-03-31',
229
- owner: 'Sarah Johnson',
230
- account: 'TechCorp Inc.',
231
- contact: 'Mike Ross',
232
- created: '2024-01-15',
233
- },
234
- sections: [
235
- {
236
- title: 'Deal Information',
237
- columns: 2,
238
- fields: [
239
- { name: 'name', label: 'Deal Name', span: 2 },
240
- { name: 'amount', label: 'Amount' },
241
- { name: 'stage', label: 'Stage' },
242
- { name: 'probability', label: 'Win Probability' },
243
- { name: 'close_date', label: 'Expected Close' },
244
- ],
245
- },
246
- {
247
- title: 'Related Records',
248
- collapsible: true,
249
- columns: 2,
250
- fields: [
251
- { name: 'account', label: 'Account' },
252
- { name: 'contact', label: 'Primary Contact' },
253
- { name: 'owner', label: 'Deal Owner' },
254
- ],
255
- },
256
- ],
257
- } as any,
258
- };
259
-
260
- /**
261
- * Primary Field + Summary Badges — record name as header, key attributes as badges
262
- */
263
- export const PrimaryFieldWithBadges: Story = {
264
- render: renderStory,
265
- args: {
266
- type: 'detail-view',
267
- title: 'Contact',
268
- primaryField: 'name',
269
- summaryFields: ['status', 'department'],
270
- objectName: 'Contact',
271
- resourceId: 'CNT-042',
272
- showBack: true,
273
- showEdit: true,
274
- data: {
275
- name: 'Sarah Johnson',
276
- email: 'sarah@example.com',
277
- phone: '+1 (555) 123-4567',
278
- status: 'Active',
279
- department: 'Engineering',
280
- title: 'Senior Engineer',
281
- },
282
- fields: [
283
- { name: 'email', label: 'Email' },
284
- { name: 'phone', label: 'Phone' },
285
- { name: 'title', label: 'Job Title' },
286
- { name: 'status', label: 'Status' },
287
- { name: 'department', label: 'Department' },
288
- ],
289
- } as any,
290
- };
291
-
292
- /**
293
- * Hide Empty Fields — sections with hideEmpty filter out null/undefined/empty fields
294
- */
295
- export const HideEmptyFields: Story = {
296
- render: renderStory,
297
- args: {
298
- type: 'detail-view',
299
- title: 'Contact',
300
- primaryField: 'name',
301
- showBack: true,
302
- data: {
303
- name: 'Mike Ross',
304
- email: 'mike@techcorp.io',
305
- phone: null,
306
- department: '',
307
- title: 'VP Engineering',
308
- website: undefined,
309
- linkedin: 'linkedin.com/in/mikeross',
310
- },
311
- sections: [
312
- {
313
- title: 'Contact Info',
314
- hideEmpty: true,
315
- fields: [
316
- { name: 'email', label: 'Email' },
317
- { name: 'phone', label: 'Phone' },
318
- { name: 'title', label: 'Job Title' },
319
- { name: 'department', label: 'Department' },
320
- { name: 'website', label: 'Website' },
321
- { name: 'linkedin', label: 'LinkedIn' },
322
- ],
323
- },
324
- {
325
- title: 'Empty Section (hidden)',
326
- hideEmpty: true,
327
- fields: [
328
- { name: 'fax', label: 'Fax' },
329
- { name: 'pager', label: 'Pager' },
330
- ],
331
- },
332
- ],
333
- } as any,
334
- };