@object-ui/plugin-detail 3.1.5 → 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.
- package/CHANGELOG.md +31 -0
- package/README.md +21 -1
- package/dist/AddressField-LgHnO2Lk.js +98 -0
- package/dist/AutoNumberField-xZCrU0eW.js +14 -0
- package/dist/{AvatarField-YGj51ozd.js → AvatarField-Dy2XGlPz.js} +16 -15
- package/dist/{BooleanField-CaA898Tk.js → BooleanField-C0Clfka5.js} +11 -10
- package/dist/CodeField-CHUa07B6.js +23 -0
- package/dist/ColorField-vxHqEhcS.js +38 -0
- package/dist/CurrencyField-DiWjYWDo.js +49 -0
- package/dist/DateField-DGaRPM4P.js +22 -0
- package/dist/DateTimeField-8QnpsI_h.js +30 -0
- package/dist/EmailField-CkVgMbpI.js +26 -0
- package/dist/FileField-5UPV7uek.js +149 -0
- package/dist/FormulaField-BUgt6-Pi.js +17 -0
- package/dist/GeolocationField-D9T_jgG6.js +118 -0
- package/dist/GridField-DE_HwiIN.js +49 -0
- package/dist/ImageField-Dswnqtzf.js +73 -0
- package/dist/LocationField-gjqbE6na.js +36 -0
- package/dist/LookupField-BcS3LRKc.js +901 -0
- package/dist/{MasterDetailField-I1A9oEGC.js → MasterDetailField-BF6_-X3A.js} +20 -19
- package/dist/NumberField-Dj2rYmrS.js +27 -0
- package/dist/ObjectField-BymIojwd.js +50 -0
- package/dist/{PasswordField-DBtluGJ1.js → PasswordField-ED_Xgqz-.js} +8 -7
- package/dist/PercentField-D-JKOxKC.js +61 -0
- package/dist/PhoneField-DSCaGYq7.js +26 -0
- package/dist/QRCodeField-CtcOUapi.js +73 -0
- package/dist/{RatingField-B_Mnr63i.js → RatingField-BDnyQFWy.js} +10 -9
- package/dist/RichTextField-CH6LVZQA.js +33 -0
- package/dist/SelectField-DE4dpkMV.js +36 -0
- package/dist/{SignatureField-CddhEK9u.js → SignatureField-B1wh3f5A.js} +18 -17
- package/dist/{SliderField-Df5hMzNc.js → SliderField-zoTCKh9n.js} +2 -1
- package/dist/SummaryField-BeBVT6VN.js +22 -0
- package/dist/TextAreaField-rfUGrRxh.js +37 -0
- package/dist/TextField-C_yM7ATQ.js +30 -0
- package/dist/TimeField-BcQmBZi9.js +22 -0
- package/dist/UrlField-BakaF6NI.js +31 -0
- package/dist/UserField-zS7y3eKb.js +76 -0
- package/dist/VectorField-CTZ4myDM.js +34 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1741 -1504
- package/dist/index.umd.cjs +43 -51
- package/dist/packages/plugin-detail/src/ActivityTimeline.d.ts.map +1 -0
- package/dist/packages/plugin-detail/src/CommentAttachment.d.ts.map +1 -0
- package/dist/packages/plugin-detail/src/CommentInput.d.ts.map +1 -0
- package/dist/packages/plugin-detail/src/DetailSection.d.ts.map +1 -0
- package/dist/packages/plugin-detail/src/DetailTabs.d.ts.map +1 -0
- package/dist/packages/plugin-detail/src/DetailView.d.ts +47 -0
- package/dist/packages/plugin-detail/src/DetailView.d.ts.map +1 -0
- package/dist/packages/plugin-detail/src/DetailView.stories.d.ts.map +1 -0
- package/dist/packages/plugin-detail/src/DiffView.d.ts.map +1 -0
- package/dist/packages/plugin-detail/src/FieldChangeItem.d.ts.map +1 -0
- package/dist/packages/plugin-detail/src/HeaderHighlight.d.ts.map +1 -0
- package/dist/packages/plugin-detail/src/InlineCreateRelated.d.ts.map +1 -0
- package/dist/packages/plugin-detail/src/MentionAutocomplete.d.ts.map +1 -0
- package/dist/packages/plugin-detail/src/PointInTimeRestore.d.ts.map +1 -0
- package/dist/packages/plugin-detail/src/ReactionPicker.d.ts.map +1 -0
- package/dist/packages/plugin-detail/src/RecordActivityTimeline.d.ts.map +1 -0
- package/dist/packages/plugin-detail/src/RecordChatterPanel.d.ts.map +1 -0
- package/dist/packages/plugin-detail/src/RecordComments.d.ts.map +1 -0
- package/dist/packages/plugin-detail/src/RecordNavigationEnhanced.d.ts.map +1 -0
- package/dist/{src → packages/plugin-detail/src}/RelatedList.d.ts +8 -0
- package/dist/packages/plugin-detail/src/RelatedList.d.ts.map +1 -0
- package/dist/packages/plugin-detail/src/RelationshipGraph.d.ts.map +1 -0
- package/dist/packages/plugin-detail/src/RichTextCommentInput.d.ts.map +1 -0
- package/dist/packages/plugin-detail/src/SectionGroup.d.ts.map +1 -0
- package/dist/packages/plugin-detail/src/SubscriptionToggle.d.ts.map +1 -0
- package/dist/packages/plugin-detail/src/ThreadedReplies.d.ts.map +1 -0
- package/dist/packages/plugin-detail/src/autoLayout.d.ts.map +1 -0
- package/dist/packages/plugin-detail/src/index.d.ts.map +1 -0
- package/dist/packages/plugin-detail/src/useDetailTranslation.d.ts.map +1 -0
- package/dist/plugin-detail.css +1 -2
- package/dist/rolldown-runtime-DnwLefa7.js +23 -0
- package/dist/{src-CXr1-vVl.js → src-DyUKLvMN.js} +29788 -37711
- package/dist/useFieldTranslation-BRgjC1oq.js +9 -0
- package/package.json +34 -12
- package/.turbo/turbo-build.log +0 -61
- package/dist/AddressField-DBkEyMcG.js +0 -93
- package/dist/AutoNumberField-Baa191z-.js +0 -14
- package/dist/CodeField-BU51nl1L.js +0 -22
- package/dist/ColorField-Cnf6ZM7c.js +0 -37
- package/dist/CurrencyField-Wg-XOId2.js +0 -51
- package/dist/DateField-Cth1ky_m.js +0 -21
- package/dist/DateTimeField-B0m6FhHL.js +0 -32
- package/dist/EmailField-Do7qT_L_.js +0 -28
- package/dist/FileField-aRJAdbQb.js +0 -151
- package/dist/FormulaField-DTMkagFx.js +0 -14
- package/dist/GeolocationField-RqpHWTEv.js +0 -113
- package/dist/GridField-D4IH0cpo.js +0 -51
- package/dist/ImageField-BYCFajjr.js +0 -75
- package/dist/LocationField-Bi_ew9sd.js +0 -35
- package/dist/LookupField-BjwlDPtt.js +0 -902
- package/dist/NumberField-D_NucQlp.js +0 -26
- package/dist/ObjectField-CG-LaM65.js +0 -52
- package/dist/PercentField-B6sO_J3i.js +0 -63
- package/dist/PhoneField-CcQAWwR6.js +0 -28
- package/dist/QRCodeField-CEjWs-J5.js +0 -72
- package/dist/RichTextField-qOEJl5Ai.js +0 -32
- package/dist/SelectField-C8hWu3gm.js +0 -30
- package/dist/SummaryField-DgiFm-Cr.js +0 -19
- package/dist/TextAreaField-DuriTqsD.js +0 -36
- package/dist/TextField-CGNSl7RU.js +0 -29
- package/dist/TimeField-YO58ctFg.js +0 -21
- package/dist/UrlField-1-BMM1jn.js +0 -33
- package/dist/UserField-B6GqxP_S.js +0 -78
- package/dist/VectorField-BkEjbSt0.js +0 -36
- package/dist/src/ActivityTimeline.d.ts.map +0 -1
- package/dist/src/CommentAttachment.d.ts.map +0 -1
- package/dist/src/CommentInput.d.ts.map +0 -1
- package/dist/src/DetailSection.d.ts.map +0 -1
- package/dist/src/DetailTabs.d.ts.map +0 -1
- package/dist/src/DetailView.d.ts +0 -23
- package/dist/src/DetailView.d.ts.map +0 -1
- package/dist/src/DetailView.stories.d.ts.map +0 -1
- package/dist/src/DiffView.d.ts.map +0 -1
- package/dist/src/FieldChangeItem.d.ts.map +0 -1
- package/dist/src/HeaderHighlight.d.ts.map +0 -1
- package/dist/src/InlineCreateRelated.d.ts.map +0 -1
- package/dist/src/MentionAutocomplete.d.ts.map +0 -1
- package/dist/src/PointInTimeRestore.d.ts.map +0 -1
- package/dist/src/ReactionPicker.d.ts.map +0 -1
- package/dist/src/RecordActivityTimeline.d.ts.map +0 -1
- package/dist/src/RecordChatterPanel.d.ts.map +0 -1
- package/dist/src/RecordComments.d.ts.map +0 -1
- package/dist/src/RecordNavigationEnhanced.d.ts.map +0 -1
- package/dist/src/RelatedList.d.ts.map +0 -1
- package/dist/src/RelationshipGraph.d.ts.map +0 -1
- package/dist/src/RichTextCommentInput.d.ts.map +0 -1
- package/dist/src/SectionGroup.d.ts.map +0 -1
- package/dist/src/SubscriptionToggle.d.ts.map +0 -1
- package/dist/src/ThreadedReplies.d.ts.map +0 -1
- package/dist/src/autoLayout.d.ts.map +0 -1
- package/dist/src/index.d.ts.map +0 -1
- package/dist/src/useDetailTranslation.d.ts.map +0 -1
- package/src/ActivityTimeline.tsx +0 -184
- package/src/CommentAttachment.tsx +0 -192
- package/src/CommentInput.tsx +0 -81
- package/src/DetailSection.tsx +0 -340
- package/src/DetailTabs.tsx +0 -73
- package/src/DetailView.stories.tsx +0 -334
- package/src/DetailView.tsx +0 -823
- package/src/DiffView.tsx +0 -231
- package/src/FieldChangeItem.tsx +0 -46
- package/src/HeaderHighlight.tsx +0 -88
- package/src/InlineCreateRelated.tsx +0 -291
- package/src/MentionAutocomplete.tsx +0 -123
- package/src/PointInTimeRestore.tsx +0 -261
- package/src/ReactionPicker.tsx +0 -106
- package/src/RecordActivityTimeline.tsx +0 -429
- package/src/RecordChatterPanel.tsx +0 -207
- package/src/RecordComments.tsx +0 -215
- package/src/RecordNavigationEnhanced.tsx +0 -211
- package/src/RelatedList.tsx +0 -413
- package/src/RelationshipGraph.tsx +0 -286
- package/src/RichTextCommentInput.tsx +0 -348
- package/src/SectionGroup.tsx +0 -101
- package/src/SubscriptionToggle.tsx +0 -60
- package/src/ThreadedReplies.tsx +0 -161
- package/src/__tests__/ActivityTimeline.test.tsx +0 -119
- package/src/__tests__/ActivityTimelineFiltering.test.tsx +0 -143
- package/src/__tests__/CommentInput.test.tsx +0 -57
- package/src/__tests__/DetailSection.test.tsx +0 -490
- package/src/__tests__/DetailView.test.tsx +0 -694
- package/src/__tests__/FieldChangeItem.test.tsx +0 -119
- package/src/__tests__/HeaderHighlight.test.tsx +0 -213
- package/src/__tests__/MentionAutocomplete.test.tsx +0 -97
- package/src/__tests__/ReactionPicker.test.tsx +0 -113
- package/src/__tests__/RecordActivityTimeline.test.tsx +0 -395
- package/src/__tests__/RecordChatterPanel.test.tsx +0 -265
- package/src/__tests__/RecordComments.test.tsx +0 -96
- package/src/__tests__/RecordCommentsPinSearch.test.tsx +0 -133
- package/src/__tests__/RelatedList.test.tsx +0 -160
- package/src/__tests__/SectionGroup.test.tsx +0 -101
- package/src/__tests__/SubscriptionToggle.test.tsx +0 -84
- package/src/__tests__/ThreadedReplies.test.tsx +0 -212
- package/src/__tests__/autoLayout.test.ts +0 -228
- package/src/__tests__/phase12-features.test.tsx +0 -583
- package/src/__tests__/roadmap-features.test.tsx +0 -478
- package/src/autoLayout.ts +0 -128
- package/src/index.tsx +0 -149
- package/src/useDetailTranslation.ts +0 -114
- package/tsconfig.json +0 -18
- package/vite.config.ts +0 -56
- package/vitest.config.ts +0 -13
- package/vitest.setup.ts +0 -1
- /package/dist/{src → packages/plugin-detail/src}/ActivityTimeline.d.ts +0 -0
- /package/dist/{src → packages/plugin-detail/src}/CommentAttachment.d.ts +0 -0
- /package/dist/{src → packages/plugin-detail/src}/CommentInput.d.ts +0 -0
- /package/dist/{src → packages/plugin-detail/src}/DetailSection.d.ts +0 -0
- /package/dist/{src → packages/plugin-detail/src}/DetailTabs.d.ts +0 -0
- /package/dist/{src → packages/plugin-detail/src}/DetailView.stories.d.ts +0 -0
- /package/dist/{src → packages/plugin-detail/src}/DiffView.d.ts +0 -0
- /package/dist/{src → packages/plugin-detail/src}/FieldChangeItem.d.ts +0 -0
- /package/dist/{src → packages/plugin-detail/src}/HeaderHighlight.d.ts +0 -0
- /package/dist/{src → packages/plugin-detail/src}/InlineCreateRelated.d.ts +0 -0
- /package/dist/{src → packages/plugin-detail/src}/MentionAutocomplete.d.ts +0 -0
- /package/dist/{src → packages/plugin-detail/src}/PointInTimeRestore.d.ts +0 -0
- /package/dist/{src → packages/plugin-detail/src}/ReactionPicker.d.ts +0 -0
- /package/dist/{src → packages/plugin-detail/src}/RecordActivityTimeline.d.ts +0 -0
- /package/dist/{src → packages/plugin-detail/src}/RecordChatterPanel.d.ts +0 -0
- /package/dist/{src → packages/plugin-detail/src}/RecordComments.d.ts +0 -0
- /package/dist/{src → packages/plugin-detail/src}/RecordNavigationEnhanced.d.ts +0 -0
- /package/dist/{src → packages/plugin-detail/src}/RelationshipGraph.d.ts +0 -0
- /package/dist/{src → packages/plugin-detail/src}/RichTextCommentInput.d.ts +0 -0
- /package/dist/{src → packages/plugin-detail/src}/SectionGroup.d.ts +0 -0
- /package/dist/{src → packages/plugin-detail/src}/SubscriptionToggle.d.ts +0 -0
- /package/dist/{src → packages/plugin-detail/src}/ThreadedReplies.d.ts +0 -0
- /package/dist/{src → packages/plugin-detail/src}/autoLayout.d.ts +0 -0
- /package/dist/{src → packages/plugin-detail/src}/index.d.ts +0 -0
- /package/dist/{src → packages/plugin-detail/src}/useDetailTranslation.d.ts +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"RecordActivityTimeline.d.ts","sourceRoot":"","sources":["../../src/RecordActivityTimeline.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAiB/B,OAAO,KAAK,EAAE,QAAQ,EAAgB,4BAA4B,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAMjH,MAAM,MAAM,cAAc,GAAG,KAAK,GAAG,eAAe,GAAG,cAAc,GAAG,YAAY,CAAC;AAErF,MAAM,WAAW,2BAA2B;IAC1C,4BAA4B;IAC5B,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,+DAA+D;IAC/D,MAAM,CAAC,EAAE,4BAA4B,CAAC;IACtC,mCAAmC;IACnC,UAAU,CAAC,EAAE,cAAc,CAAC;IAC5B,sCAAsC;IACtC,cAAc,CAAC,EAAE,CAAC,IAAI,EAAE,cAAc,KAAK,IAAI,CAAC;IAChD,2CAA2C;IAC3C,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,gDAAgD;IAChD,UAAU,CAAC,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACxC,oBAAoB;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,yCAAyC;IACzC,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACtD,uCAAuC;IACvC,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/E,0CAA0C;IAC1C,gBAAgB,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACpF,yBAAyB;IACzB,YAAY,CAAC,EAAE,kBAAkB,CAAC;IAClC,4CAA4C;IAC5C,oBAAoB,CAAC,EAAE,CAAC,UAAU,EAAE,OAAO,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACrE,4EAA4E;IAC5E,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AA6DD;;;;;;;GAOG;AACH,eAAO,MAAM,sBAAsB,EAAE,KAAK,CAAC,EAAE,CAAC,2BAA2B,CA0SxE,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"RecordChatterPanel.d.ts","sourceRoot":"","sources":["../../src/RecordChatterPanel.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,KAAK,EAAE,2BAA2B,EAAE,QAAQ,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAElG,OAAO,KAAK,EAAE,cAAc,EAA+B,MAAM,0BAA0B,CAAC;AAE5F,MAAM,WAAW,uBAAuB;IACtC,mEAAmE;IACnE,MAAM,CAAC,EAAE,2BAA2B,CAAC;IACrC,qDAAqD;IACrD,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,2CAA2C;IAC3C,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,0CAA0C;IAC1C,UAAU,CAAC,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACxC,oBAAoB;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,yCAAyC;IACzC,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACtD,uCAAuC;IACvC,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/E,0CAA0C;IAC1C,gBAAgB,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACpF,yBAAyB;IACzB,YAAY,CAAC,EAAE,kBAAkB,CAAC;IAClC,4CAA4C;IAC5C,oBAAoB,CAAC,EAAE,CAAC,UAAU,EAAE,OAAO,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACrE,kBAAkB;IAClB,UAAU,CAAC,EAAE,cAAc,CAAC;IAC5B,iCAAiC;IACjC,cAAc,CAAC,EAAE,CAAC,IAAI,EAAE,cAAc,KAAK,IAAI,CAAC;IAChD,kEAAkE;IAClE,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,kBAAkB,EAAE,KAAK,CAAC,EAAE,CAAC,uBAAuB,CAwJhE,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"RecordComments.d.ts","sourceRoot":"","sources":["../../src/RecordComments.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAErD,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,YAAY,EAAE,CAAC;IACzB,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACtD,+CAA+C;IAC/C,WAAW,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,KAAK,IAAI,CAAC;IACnD,iDAAiD;IACjD,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAwBD,eAAO,MAAM,cAAc,EAAE,KAAK,CAAC,EAAE,CAAC,mBAAmB,CAyKxD,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"RecordNavigationEnhanced.d.ts","sourceRoot":"","sources":["../../src/RecordNavigationEnhanced.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAU/B,MAAM,WAAW,6BAA6B;IAC5C,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,UAAU,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,eAAO,MAAM,wBAAwB,EAAE,KAAK,CAAC,EAAE,CAAC,6BAA6B,CAuL5E,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"RelatedList.d.ts","sourceRoot":"","sources":["../../src/RelatedList.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAqB/B,OAAO,KAAK,EAAE,UAAU,EAAiB,MAAM,kBAAkB,CAAC;AAKlE,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;IAChC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;IACb,MAAM,CAAC,EAAE,GAAG,CAAC;IACb,OAAO,CAAC,EAAE,GAAG,EAAE,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,kDAAkD;IAClD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,4CAA4C;IAC5C,KAAK,CAAC,EAAE,MAAM,IAAI,CAAC;IACnB,iDAAiD;IACjD,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,iDAAiD;IACjD,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,IAAI,CAAC;IAC/B,mDAAmD;IACnD,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,IAAI,CAAC;IACjC,6DAA6D;IAC7D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,4BAA4B;IAC5B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,4BAA4B;IAC5B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,sCAAsC;IACtC,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,oEAAoE;IACpE,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,eAAO,MAAM,WAAW,EAAE,KAAK,CAAC,EAAE,CAAC,gBAAgB,CA2VlD,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"RelationshipGraph.d.ts","sourceRoot":"","sources":["../../src/RelationshipGraph.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,cAAc,CAAC,EAAE,SAAS,EAAE,CAAC;CAC9B;AAED,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,SAAS,CAAC;IAClB,cAAc,EAAE,SAAS,EAAE,CAAC;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAsHD,eAAO,MAAM,iBAAiB,EAAE,KAAK,CAAC,EAAE,CAAC,sBAAsB,CA8I9D,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"RichTextCommentInput.d.ts","sourceRoot":"","sources":["../../src/RichTextCommentInput.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAa/B,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,yBAAyB;IACxC,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,QAAQ,CAAC,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACtC,kBAAkB,CAAC,EAAE,iBAAiB,EAAE,CAAC;IACzC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAiCD,eAAO,MAAM,oBAAoB,EAAE,KAAK,CAAC,EAAE,CAAC,yBAAyB,CAuRpE,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"SectionGroup.d.ts","sourceRoot":"","sources":["../../src/SectionGroup.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAS/B,OAAO,KAAK,EAAE,YAAY,IAAI,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEzE,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,gBAAgB,CAAC;IACxB,IAAI,CAAC,EAAE,GAAG,CAAC;IACX,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,GAAG,CAAC;IACnB,kDAAkD;IAClD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,KAAK,IAAI,CAAC;CACrD;AAED,eAAO,MAAM,YAAY,EAAE,KAAK,CAAC,EAAE,CAAC,iBAAiB,CAsEpD,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"SubscriptionToggle.d.ts","sourceRoot":"","sources":["../../src/SubscriptionToggle.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAE3D,MAAM,WAAW,uBAAuB;IACtC,iCAAiC;IACjC,YAAY,EAAE,kBAAkB,CAAC;IACjC,4CAA4C;IAC5C,QAAQ,CAAC,EAAE,CAAC,UAAU,EAAE,OAAO,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACzD,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;GAGG;AACH,eAAO,MAAM,kBAAkB,EAAE,KAAK,CAAC,EAAE,CAAC,uBAAuB,CAkChE,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ThreadedReplies.d.ts","sourceRoot":"","sources":["../../src/ThreadedReplies.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAEjD,MAAM,WAAW,oBAAoB;IACnC,sCAAsC;IACtC,UAAU,EAAE,QAAQ,CAAC;IACrB,kCAAkC;IAClC,OAAO,EAAE,QAAQ,EAAE,CAAC;IACpB,uCAAuC;IACvC,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/E,sCAAsC;IACtC,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAqBD;;;GAGG;AACH,eAAO,MAAM,eAAe,EAAE,KAAK,CAAC,EAAE,CAAC,oBAAoB,CAgH1D,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"autoLayout.d.ts","sourceRoot":"","sources":["../../src/autoLayout.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAgBxD;;GAEG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAErD;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,MAAM,GAAG,MAAM,CAatF;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAC3B,MAAM,EAAE,eAAe,EAAE,EACzB,OAAO,EAAE,MAAM,GACd,eAAe,EAAE,CAcnB;AAED;;;;;;;;GAQG;AACH,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,eAAe,EAAE,EACzB,aAAa,EAAE,MAAM,GAAG,SAAS,EACjC,cAAc,CAAC,EAAE,MAAM,GACtB;IAAE,MAAM,EAAE,eAAe,EAAE,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAchD"}
|
package/dist/src/index.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useDetailTranslation.d.ts","sourceRoot":"","sources":["../../src/useDetailTranslation.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH;;;;;;GAMG;AACH,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAChC,OAAO,EAAE,MAAM;aAQE,MAAM,YAAY,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;;;EA0B3D;AAED;;;GAGG;AACH,eAAO,MAAM,2BAA2B,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CA6C9D,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,oBAAoB;aAnFd,MAAM,YAAY,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;;;CAsF3D,CAAC"}
|
package/src/ActivityTimeline.tsx
DELETED
|
@@ -1,184 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* ObjectUI
|
|
3
|
-
* Copyright (c) 2024-present ObjectStack Inc.
|
|
4
|
-
*
|
|
5
|
-
* This source code is licensed under the MIT license found in the
|
|
6
|
-
* LICENSE file in the root directory of this source tree.
|
|
7
|
-
*/
|
|
8
|
-
|
|
9
|
-
import * as React from 'react';
|
|
10
|
-
import { cn, Card, CardHeader, CardTitle, CardContent } from '@object-ui/components';
|
|
11
|
-
import { Activity, Edit, PlusCircle, Trash2, MessageSquare, ArrowRightLeft, Filter } from 'lucide-react';
|
|
12
|
-
import type { ActivityEntry } from '@object-ui/types';
|
|
13
|
-
|
|
14
|
-
export type ActivityFilterType = ActivityEntry['type'] | 'all';
|
|
15
|
-
|
|
16
|
-
export interface ActivityTimelineProps {
|
|
17
|
-
activities: ActivityEntry[];
|
|
18
|
-
/** Show filter controls for activity types */
|
|
19
|
-
filterable?: boolean;
|
|
20
|
-
/** Default filter (defaults to 'all') */
|
|
21
|
-
defaultFilter?: ActivityFilterType;
|
|
22
|
-
className?: string;
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
const ACTIVITY_ICONS: Record<ActivityEntry['type'], React.ElementType> = {
|
|
26
|
-
field_change: Edit,
|
|
27
|
-
create: PlusCircle,
|
|
28
|
-
delete: Trash2,
|
|
29
|
-
comment: MessageSquare,
|
|
30
|
-
status_change: ArrowRightLeft,
|
|
31
|
-
};
|
|
32
|
-
|
|
33
|
-
const ACTIVITY_COLORS: Record<ActivityEntry['type'], string> = {
|
|
34
|
-
field_change: 'bg-blue-100 text-blue-600',
|
|
35
|
-
create: 'bg-green-100 text-green-600',
|
|
36
|
-
delete: 'bg-red-100 text-red-600',
|
|
37
|
-
comment: 'bg-purple-100 text-purple-600',
|
|
38
|
-
status_change: 'bg-amber-100 text-amber-600',
|
|
39
|
-
};
|
|
40
|
-
|
|
41
|
-
function formatTimestamp(timestamp: string): string {
|
|
42
|
-
try {
|
|
43
|
-
const date = new Date(timestamp);
|
|
44
|
-
const now = new Date();
|
|
45
|
-
const diffMs = now.getTime() - date.getTime();
|
|
46
|
-
const diffMins = Math.floor(diffMs / 60000);
|
|
47
|
-
|
|
48
|
-
if (diffMins < 1) return 'just now';
|
|
49
|
-
if (diffMins < 60) return `${diffMins}m ago`;
|
|
50
|
-
const diffHours = Math.floor(diffMins / 60);
|
|
51
|
-
if (diffHours < 24) return `${diffHours}h ago`;
|
|
52
|
-
const diffDays = Math.floor(diffHours / 24);
|
|
53
|
-
if (diffDays < 7) return `${diffDays}d ago`;
|
|
54
|
-
return date.toLocaleDateString();
|
|
55
|
-
} catch {
|
|
56
|
-
return timestamp;
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
function formatFieldChange(entry: ActivityEntry): string {
|
|
61
|
-
if (entry.description) return entry.description;
|
|
62
|
-
|
|
63
|
-
if (entry.type === 'field_change' && entry.field) {
|
|
64
|
-
const fieldLabel = entry.field.charAt(0).toUpperCase() + entry.field.slice(1).replace(/_/g, ' ');
|
|
65
|
-
const oldVal = entry.oldValue != null ? String(entry.oldValue) : '(empty)';
|
|
66
|
-
const newVal = entry.newValue != null ? String(entry.newValue) : '(empty)';
|
|
67
|
-
return `Changed ${fieldLabel} from "${oldVal}" to "${newVal}"`;
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
if (entry.type === 'create') return 'Created this record';
|
|
71
|
-
if (entry.type === 'delete') return 'Deleted this record';
|
|
72
|
-
if (entry.type === 'status_change' && entry.field) {
|
|
73
|
-
const newVal = entry.newValue != null ? String(entry.newValue) : '(empty)';
|
|
74
|
-
return `Changed status to "${newVal}"`;
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
return 'Updated record';
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
const FILTER_LABELS: Record<ActivityFilterType, string> = {
|
|
81
|
-
all: 'All',
|
|
82
|
-
field_change: 'Field Changes',
|
|
83
|
-
create: 'Creates',
|
|
84
|
-
delete: 'Deletes',
|
|
85
|
-
comment: 'Comments',
|
|
86
|
-
status_change: 'Status Changes',
|
|
87
|
-
};
|
|
88
|
-
|
|
89
|
-
export const ActivityTimeline: React.FC<ActivityTimelineProps> = ({
|
|
90
|
-
activities,
|
|
91
|
-
filterable = false,
|
|
92
|
-
defaultFilter = 'all',
|
|
93
|
-
className,
|
|
94
|
-
}) => {
|
|
95
|
-
const [activeFilter, setActiveFilter] = React.useState<ActivityFilterType>(defaultFilter);
|
|
96
|
-
|
|
97
|
-
const filteredActivities = React.useMemo(() => {
|
|
98
|
-
if (activeFilter === 'all') return activities;
|
|
99
|
-
return activities.filter(a => a.type === activeFilter);
|
|
100
|
-
}, [activities, activeFilter]);
|
|
101
|
-
|
|
102
|
-
return (
|
|
103
|
-
<Card className={cn('', className)}>
|
|
104
|
-
<CardHeader>
|
|
105
|
-
<CardTitle className="flex items-center gap-2 text-base">
|
|
106
|
-
<Activity className="h-4 w-4" />
|
|
107
|
-
Activity
|
|
108
|
-
<span className="text-sm font-normal text-muted-foreground">
|
|
109
|
-
({filteredActivities.length})
|
|
110
|
-
</span>
|
|
111
|
-
</CardTitle>
|
|
112
|
-
</CardHeader>
|
|
113
|
-
<CardContent>
|
|
114
|
-
{/* Filter controls */}
|
|
115
|
-
{filterable && (
|
|
116
|
-
<div className="flex flex-wrap gap-1.5 mb-4" role="group" aria-label="Activity type filter">
|
|
117
|
-
{(Object.keys(FILTER_LABELS) as ActivityFilterType[]).map(type => (
|
|
118
|
-
<button
|
|
119
|
-
key={type}
|
|
120
|
-
type="button"
|
|
121
|
-
className={cn(
|
|
122
|
-
'inline-flex items-center gap-1 rounded-full px-2.5 py-0.5 text-xs font-medium transition-colors',
|
|
123
|
-
activeFilter === type
|
|
124
|
-
? 'bg-primary text-primary-foreground'
|
|
125
|
-
: 'bg-muted text-muted-foreground hover:bg-muted/80',
|
|
126
|
-
)}
|
|
127
|
-
onClick={() => setActiveFilter(type)}
|
|
128
|
-
aria-pressed={activeFilter === type}
|
|
129
|
-
>
|
|
130
|
-
{type !== 'all' && React.createElement(ACTIVITY_ICONS[type] || Edit, { className: 'h-3 w-3' })}
|
|
131
|
-
{FILTER_LABELS[type]}
|
|
132
|
-
</button>
|
|
133
|
-
))}
|
|
134
|
-
</div>
|
|
135
|
-
)}
|
|
136
|
-
|
|
137
|
-
{filteredActivities.length === 0 ? (
|
|
138
|
-
<p className="text-sm text-muted-foreground text-center py-4">
|
|
139
|
-
No activity recorded
|
|
140
|
-
</p>
|
|
141
|
-
) : (
|
|
142
|
-
<div className="relative">
|
|
143
|
-
{/* Timeline line */}
|
|
144
|
-
<div className="absolute left-4 top-2 bottom-2 w-px bg-border" />
|
|
145
|
-
|
|
146
|
-
<div className="space-y-4">
|
|
147
|
-
{filteredActivities.map((entry) => {
|
|
148
|
-
const Icon = ACTIVITY_ICONS[entry.type] || Edit;
|
|
149
|
-
const colorClass = ACTIVITY_COLORS[entry.type] || 'bg-gray-100 text-gray-600';
|
|
150
|
-
|
|
151
|
-
return (
|
|
152
|
-
<div key={entry.id} className="flex gap-3 relative">
|
|
153
|
-
{/* Icon */}
|
|
154
|
-
<div
|
|
155
|
-
className={cn(
|
|
156
|
-
'shrink-0 h-8 w-8 rounded-full flex items-center justify-center z-10',
|
|
157
|
-
colorClass,
|
|
158
|
-
)}
|
|
159
|
-
>
|
|
160
|
-
<Icon className="h-3.5 w-3.5" />
|
|
161
|
-
</div>
|
|
162
|
-
{/* Content */}
|
|
163
|
-
<div className="flex-1 min-w-0 pt-1">
|
|
164
|
-
<p className="text-sm">
|
|
165
|
-
<span className="font-medium">{entry.user}</span>
|
|
166
|
-
{' '}
|
|
167
|
-
<span className="text-muted-foreground">
|
|
168
|
-
{formatFieldChange(entry)}
|
|
169
|
-
</span>
|
|
170
|
-
</p>
|
|
171
|
-
<p className="text-xs text-muted-foreground mt-0.5">
|
|
172
|
-
{formatTimestamp(entry.timestamp)}
|
|
173
|
-
</p>
|
|
174
|
-
</div>
|
|
175
|
-
</div>
|
|
176
|
-
);
|
|
177
|
-
})}
|
|
178
|
-
</div>
|
|
179
|
-
</div>
|
|
180
|
-
)}
|
|
181
|
-
</CardContent>
|
|
182
|
-
</Card>
|
|
183
|
-
);
|
|
184
|
-
};
|
|
@@ -1,192 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* ObjectUI
|
|
3
|
-
* Copyright (c) 2024-present ObjectStack Inc.
|
|
4
|
-
*
|
|
5
|
-
* This source code is licensed under the MIT license found in the
|
|
6
|
-
* LICENSE file in the root directory of this source tree.
|
|
7
|
-
*/
|
|
8
|
-
|
|
9
|
-
import * as React from 'react';
|
|
10
|
-
import { cn, Button } from '@object-ui/components';
|
|
11
|
-
import { Paperclip, X, FileText, Image, FileArchive, File, Upload } from 'lucide-react';
|
|
12
|
-
|
|
13
|
-
export interface Attachment {
|
|
14
|
-
id: string;
|
|
15
|
-
name: string;
|
|
16
|
-
size: number;
|
|
17
|
-
type: string;
|
|
18
|
-
url?: string;
|
|
19
|
-
thumbnailUrl?: string;
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
export interface CommentAttachmentProps {
|
|
23
|
-
attachments: Attachment[];
|
|
24
|
-
onUpload?: (files: FileList) => void | Promise<void>;
|
|
25
|
-
onRemove?: (attachmentId: string) => void;
|
|
26
|
-
className?: string;
|
|
27
|
-
readOnly?: boolean;
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
function formatFileSize(bytes: number): string {
|
|
31
|
-
if (bytes < 1024) return `${bytes} B`;
|
|
32
|
-
if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;
|
|
33
|
-
return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
function isImageType(type: string): boolean {
|
|
37
|
-
return type.startsWith('image/');
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
function getFileIcon(type: string): React.ElementType {
|
|
41
|
-
if (isImageType(type)) return Image;
|
|
42
|
-
if (type.includes('pdf') || type.includes('document') || type.includes('text'))
|
|
43
|
-
return FileText;
|
|
44
|
-
if (type.includes('zip') || type.includes('archive') || type.includes('compressed'))
|
|
45
|
-
return FileArchive;
|
|
46
|
-
return File;
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
export const CommentAttachment: React.FC<CommentAttachmentProps> = ({
|
|
50
|
-
attachments,
|
|
51
|
-
onUpload,
|
|
52
|
-
onRemove,
|
|
53
|
-
className,
|
|
54
|
-
readOnly = false,
|
|
55
|
-
}) => {
|
|
56
|
-
const [isDragOver, setIsDragOver] = React.useState(false);
|
|
57
|
-
const fileInputRef = React.useRef<HTMLInputElement>(null);
|
|
58
|
-
|
|
59
|
-
const handleDragOver = React.useCallback((e: React.DragEvent) => {
|
|
60
|
-
e.preventDefault();
|
|
61
|
-
e.stopPropagation();
|
|
62
|
-
setIsDragOver(true);
|
|
63
|
-
}, []);
|
|
64
|
-
|
|
65
|
-
const handleDragLeave = React.useCallback((e: React.DragEvent) => {
|
|
66
|
-
e.preventDefault();
|
|
67
|
-
e.stopPropagation();
|
|
68
|
-
setIsDragOver(false);
|
|
69
|
-
}, []);
|
|
70
|
-
|
|
71
|
-
const handleDrop = React.useCallback(
|
|
72
|
-
(e: React.DragEvent) => {
|
|
73
|
-
e.preventDefault();
|
|
74
|
-
e.stopPropagation();
|
|
75
|
-
setIsDragOver(false);
|
|
76
|
-
if (onUpload && e.dataTransfer.files.length > 0) {
|
|
77
|
-
onUpload(e.dataTransfer.files);
|
|
78
|
-
}
|
|
79
|
-
},
|
|
80
|
-
[onUpload],
|
|
81
|
-
);
|
|
82
|
-
|
|
83
|
-
const handleFileSelect = React.useCallback(
|
|
84
|
-
(e: React.ChangeEvent<HTMLInputElement>) => {
|
|
85
|
-
if (onUpload && e.target.files && e.target.files.length > 0) {
|
|
86
|
-
onUpload(e.target.files);
|
|
87
|
-
// Reset so the same file can be selected again
|
|
88
|
-
e.target.value = '';
|
|
89
|
-
}
|
|
90
|
-
},
|
|
91
|
-
[onUpload],
|
|
92
|
-
);
|
|
93
|
-
|
|
94
|
-
return (
|
|
95
|
-
<div className={cn('space-y-2', className)}>
|
|
96
|
-
{/* Drop zone */}
|
|
97
|
-
{onUpload && !readOnly && (
|
|
98
|
-
<div
|
|
99
|
-
className={cn(
|
|
100
|
-
'border-2 border-dashed rounded-md px-4 py-3 text-center transition-colors cursor-pointer',
|
|
101
|
-
isDragOver
|
|
102
|
-
? 'border-primary bg-primary/5'
|
|
103
|
-
: 'border-muted-foreground/25 hover:border-muted-foreground/40',
|
|
104
|
-
)}
|
|
105
|
-
onDragOver={handleDragOver}
|
|
106
|
-
onDragLeave={handleDragLeave}
|
|
107
|
-
onDrop={handleDrop}
|
|
108
|
-
onClick={() => fileInputRef.current?.click()}
|
|
109
|
-
role="button"
|
|
110
|
-
tabIndex={0}
|
|
111
|
-
onKeyDown={(e) => {
|
|
112
|
-
if (e.key === 'Enter' || e.key === ' ') {
|
|
113
|
-
e.preventDefault();
|
|
114
|
-
fileInputRef.current?.click();
|
|
115
|
-
}
|
|
116
|
-
}}
|
|
117
|
-
>
|
|
118
|
-
<Upload className="h-5 w-5 mx-auto text-muted-foreground mb-1" />
|
|
119
|
-
<p className="text-xs text-muted-foreground">
|
|
120
|
-
Drop files here or click to upload
|
|
121
|
-
</p>
|
|
122
|
-
<input
|
|
123
|
-
ref={fileInputRef}
|
|
124
|
-
type="file"
|
|
125
|
-
multiple
|
|
126
|
-
className="hidden"
|
|
127
|
-
onChange={handleFileSelect}
|
|
128
|
-
/>
|
|
129
|
-
</div>
|
|
130
|
-
)}
|
|
131
|
-
|
|
132
|
-
{/* Attachment list */}
|
|
133
|
-
{attachments.length > 0 && (
|
|
134
|
-
<div className="space-y-1.5">
|
|
135
|
-
<div className="flex items-center gap-1.5 text-xs text-muted-foreground">
|
|
136
|
-
<Paperclip className="h-3 w-3" />
|
|
137
|
-
<span>
|
|
138
|
-
{attachments.length} attachment{attachments.length !== 1 ? 's' : ''}
|
|
139
|
-
</span>
|
|
140
|
-
</div>
|
|
141
|
-
<div className="grid grid-cols-1 sm:grid-cols-2 gap-2">
|
|
142
|
-
{attachments.map((attachment) => {
|
|
143
|
-
const isImage = isImageType(attachment.type);
|
|
144
|
-
const Icon = getFileIcon(attachment.type);
|
|
145
|
-
|
|
146
|
-
return (
|
|
147
|
-
<div
|
|
148
|
-
key={attachment.id}
|
|
149
|
-
className="flex items-center gap-2 rounded-md border px-2.5 py-2 bg-muted/30 group"
|
|
150
|
-
>
|
|
151
|
-
{/* Thumbnail or icon */}
|
|
152
|
-
{isImage && (attachment.thumbnailUrl || attachment.url) ? (
|
|
153
|
-
<img
|
|
154
|
-
src={attachment.thumbnailUrl || attachment.url}
|
|
155
|
-
alt={attachment.name}
|
|
156
|
-
className="h-10 w-10 rounded object-cover shrink-0"
|
|
157
|
-
/>
|
|
158
|
-
) : (
|
|
159
|
-
<div className="h-10 w-10 rounded bg-muted flex items-center justify-center shrink-0">
|
|
160
|
-
<Icon className="h-5 w-5 text-muted-foreground" />
|
|
161
|
-
</div>
|
|
162
|
-
)}
|
|
163
|
-
|
|
164
|
-
{/* File info */}
|
|
165
|
-
<div className="flex-1 min-w-0">
|
|
166
|
-
<p className="text-xs font-medium truncate">{attachment.name}</p>
|
|
167
|
-
<p className="text-[10px] text-muted-foreground">
|
|
168
|
-
{formatFileSize(attachment.size)}
|
|
169
|
-
</p>
|
|
170
|
-
</div>
|
|
171
|
-
|
|
172
|
-
{/* Remove button */}
|
|
173
|
-
{onRemove && !readOnly && (
|
|
174
|
-
<Button
|
|
175
|
-
variant="ghost"
|
|
176
|
-
size="icon"
|
|
177
|
-
className="h-6 w-6 shrink-0 opacity-0 group-hover:opacity-100 transition-opacity"
|
|
178
|
-
onClick={() => onRemove(attachment.id)}
|
|
179
|
-
title="Remove attachment"
|
|
180
|
-
>
|
|
181
|
-
<X className="h-3.5 w-3.5" />
|
|
182
|
-
</Button>
|
|
183
|
-
)}
|
|
184
|
-
</div>
|
|
185
|
-
);
|
|
186
|
-
})}
|
|
187
|
-
</div>
|
|
188
|
-
</div>
|
|
189
|
-
)}
|
|
190
|
-
</div>
|
|
191
|
-
);
|
|
192
|
-
};
|
package/src/CommentInput.tsx
DELETED
|
@@ -1,81 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* ObjectUI
|
|
3
|
-
* Copyright (c) 2024-present ObjectStack Inc.
|
|
4
|
-
*
|
|
5
|
-
* This source code is licensed under the MIT license found in the
|
|
6
|
-
* LICENSE file in the root directory of this source tree.
|
|
7
|
-
*/
|
|
8
|
-
|
|
9
|
-
import * as React from 'react';
|
|
10
|
-
import { cn, Button } from '@object-ui/components';
|
|
11
|
-
import { Send } from 'lucide-react';
|
|
12
|
-
|
|
13
|
-
export interface CommentInputProps {
|
|
14
|
-
/** Called when a comment is submitted */
|
|
15
|
-
onSubmit: (text: string) => void | Promise<void>;
|
|
16
|
-
/** Placeholder text */
|
|
17
|
-
placeholder?: string;
|
|
18
|
-
/** Whether the input is disabled */
|
|
19
|
-
disabled?: boolean;
|
|
20
|
-
className?: string;
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
/**
|
|
24
|
-
* CommentInput — Simple comment input component.
|
|
25
|
-
* Renders a "Leave a comment" textarea with submit button.
|
|
26
|
-
* Supports Ctrl+Enter to submit.
|
|
27
|
-
*/
|
|
28
|
-
export const CommentInput: React.FC<CommentInputProps> = ({
|
|
29
|
-
onSubmit,
|
|
30
|
-
placeholder = 'Leave a comment…',
|
|
31
|
-
disabled = false,
|
|
32
|
-
className,
|
|
33
|
-
}) => {
|
|
34
|
-
const [text, setText] = React.useState('');
|
|
35
|
-
const [isSubmitting, setIsSubmitting] = React.useState(false);
|
|
36
|
-
|
|
37
|
-
const handleSubmit = React.useCallback(async () => {
|
|
38
|
-
const value = text.trim();
|
|
39
|
-
if (!value) return;
|
|
40
|
-
setIsSubmitting(true);
|
|
41
|
-
try {
|
|
42
|
-
await onSubmit(value);
|
|
43
|
-
setText('');
|
|
44
|
-
} finally {
|
|
45
|
-
setIsSubmitting(false);
|
|
46
|
-
}
|
|
47
|
-
}, [text, onSubmit]);
|
|
48
|
-
|
|
49
|
-
const handleKeyDown = React.useCallback(
|
|
50
|
-
(e: React.KeyboardEvent) => {
|
|
51
|
-
if (e.key === 'Enter' && (e.ctrlKey || e.metaKey)) {
|
|
52
|
-
e.preventDefault();
|
|
53
|
-
handleSubmit();
|
|
54
|
-
}
|
|
55
|
-
},
|
|
56
|
-
[handleSubmit],
|
|
57
|
-
);
|
|
58
|
-
|
|
59
|
-
return (
|
|
60
|
-
<div className={cn('flex gap-2', className)}>
|
|
61
|
-
<textarea
|
|
62
|
-
className="flex-1 min-h-[60px] rounded-md border border-input bg-background px-3 py-2 text-sm placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring resize-none"
|
|
63
|
-
placeholder={placeholder}
|
|
64
|
-
value={text}
|
|
65
|
-
onChange={(e) => setText(e.target.value)}
|
|
66
|
-
onKeyDown={handleKeyDown}
|
|
67
|
-
disabled={disabled || isSubmitting}
|
|
68
|
-
/>
|
|
69
|
-
<Button
|
|
70
|
-
size="icon"
|
|
71
|
-
variant="default"
|
|
72
|
-
onClick={handleSubmit}
|
|
73
|
-
disabled={!text.trim() || isSubmitting || disabled}
|
|
74
|
-
className="shrink-0 self-end"
|
|
75
|
-
aria-label="Submit comment"
|
|
76
|
-
>
|
|
77
|
-
<Send className="h-4 w-4" />
|
|
78
|
-
</Button>
|
|
79
|
-
</div>
|
|
80
|
-
);
|
|
81
|
-
};
|