@weavy/uikit-react 12.1.0 → 14.0.0

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 (280) hide show
  1. package/changelog.md +60 -0
  2. package/dist/cjs/index.js +28 -6
  3. package/dist/cjs/index.js.map +1 -1
  4. package/dist/cjs/types/client/WeavyClient.d.ts +8 -1
  5. package/dist/cjs/types/components/Attachment.d.ts +2 -1
  6. package/dist/cjs/types/components/Chat.d.ts +1 -1
  7. package/dist/cjs/types/components/Messages.d.ts +3 -1
  8. package/dist/cjs/types/components/PdfViewer.d.ts +3 -1
  9. package/dist/cjs/types/components/Preview.d.ts +8 -10
  10. package/dist/cjs/types/contexts/PreviewContext.d.ts +2 -1
  11. package/dist/cjs/types/contexts/WeavyContext.d.ts +2 -3
  12. package/dist/cjs/types/hooks/useConversations.d.ts +1 -1
  13. package/dist/cjs/types/hooks/useMutateMessage.d.ts +1 -1
  14. package/dist/cjs/types/hooks/useMutateRead.d.ts +1 -0
  15. package/dist/cjs/types/types/Chat.d.ts +2 -1
  16. package/dist/cjs/types/types/Message.d.ts +2 -0
  17. package/dist/cjs/types/types/types.d.ts +63 -9
  18. package/dist/cjs/types/ui/Spinner.d.ts +10 -0
  19. package/dist/cjs/types/utils/fileUtilities.d.ts +1 -4
  20. package/dist/css/weavy-chat.css +1803 -1041
  21. package/dist/css/weavy-messenger.css +2141 -1360
  22. package/dist/css/weavy.css +1943 -1162
  23. package/dist/esm/index.js +28 -6
  24. package/dist/esm/index.js.map +1 -1
  25. package/dist/esm/types/client/WeavyClient.d.ts +8 -1
  26. package/dist/esm/types/components/Attachment.d.ts +2 -1
  27. package/dist/esm/types/components/Chat.d.ts +1 -1
  28. package/dist/esm/types/components/Messages.d.ts +3 -1
  29. package/dist/esm/types/components/PdfViewer.d.ts +3 -1
  30. package/dist/esm/types/components/Preview.d.ts +8 -10
  31. package/dist/esm/types/contexts/PreviewContext.d.ts +2 -1
  32. package/dist/esm/types/contexts/WeavyContext.d.ts +2 -3
  33. package/dist/esm/types/hooks/useConversations.d.ts +1 -1
  34. package/dist/esm/types/hooks/useMutateMessage.d.ts +1 -1
  35. package/dist/esm/types/hooks/useMutateRead.d.ts +1 -0
  36. package/dist/esm/types/types/Chat.d.ts +2 -1
  37. package/dist/esm/types/types/Message.d.ts +2 -0
  38. package/dist/esm/types/types/types.d.ts +63 -9
  39. package/dist/esm/types/ui/Spinner.d.ts +10 -0
  40. package/dist/esm/types/utils/fileUtilities.d.ts +1 -4
  41. package/dist/index.d.ts +15 -7
  42. package/package.json +2 -2
  43. package/rollup.config.js +3 -1
  44. package/src/client/WeavyClient.ts +105 -29
  45. package/src/components/Attachment.tsx +8 -7
  46. package/src/components/Chat.tsx +8 -7
  47. package/src/components/Conversation.tsx +29 -23
  48. package/src/components/ConversationBadge.tsx +7 -5
  49. package/src/components/ConversationForm.tsx +1 -1
  50. package/src/components/ConversationList.tsx +59 -11
  51. package/src/components/ConversationListItem.tsx +71 -54
  52. package/src/components/FileBrowser.tsx +53 -50
  53. package/src/components/MeetingCard.tsx +35 -13
  54. package/src/components/Meetings.tsx +1 -1
  55. package/src/components/Message.tsx +41 -41
  56. package/src/components/Messages.tsx +62 -61
  57. package/src/components/Messenger.tsx +7 -2
  58. package/src/components/NewConversation.tsx +1 -1
  59. package/src/components/PdfViewer.tsx +93 -88
  60. package/src/components/Preview.tsx +115 -54
  61. package/src/components/Reactions.tsx +11 -5
  62. package/src/components/SearchUsers.tsx +21 -11
  63. package/src/components/SeenBy.tsx +13 -7
  64. package/src/components/Typing.tsx +11 -12
  65. package/src/contexts/PreviewContext.tsx +90 -16
  66. package/src/contexts/UserContext.tsx +1 -1
  67. package/src/contexts/WeavyContext.tsx +10 -7
  68. package/src/hooks/useBadge.ts +2 -6
  69. package/src/hooks/useChat.ts +3 -14
  70. package/src/hooks/useConversation.ts +1 -7
  71. package/src/hooks/useConversations.ts +15 -11
  72. package/src/hooks/useFileUploader.ts +6 -8
  73. package/src/hooks/useMembers.ts +1 -7
  74. package/src/hooks/useMessages.ts +1 -7
  75. package/src/hooks/useMutateChat.ts +6 -11
  76. package/src/hooks/useMutateConversation.ts +7 -10
  77. package/src/hooks/useMutateConversationName.ts +10 -12
  78. package/src/hooks/useMutateDeleteReaction.ts +3 -8
  79. package/src/hooks/useMutateExternalBlobs.ts +6 -11
  80. package/src/hooks/useMutateMeeting.ts +6 -11
  81. package/src/hooks/useMutateMembers.ts +8 -13
  82. package/src/hooks/useMutateMessage.ts +9 -18
  83. package/src/hooks/useMutatePinned.ts +3 -8
  84. package/src/hooks/useMutateReaction.ts +6 -12
  85. package/src/hooks/useMutateRead.ts +5 -12
  86. package/src/hooks/useMutateRemoveMembers.ts +7 -12
  87. package/src/hooks/useMutateTyping.ts +6 -11
  88. package/src/hooks/usePresence.ts +2 -3
  89. package/src/hooks/useReactions.ts +11 -12
  90. package/src/hooks/useSearchUsers.ts +1 -6
  91. package/src/hooks/useUser.ts +3 -14
  92. package/src/scss/theme/_alert.scss +61 -63
  93. package/src/scss/theme/_appbar.scss +105 -28
  94. package/src/scss/theme/_avatar.scss +23 -28
  95. package/src/scss/theme/_badge.scss +26 -18
  96. package/src/scss/theme/_buttons.scss +107 -52
  97. package/src/scss/theme/_card.scss +102 -4
  98. package/src/scss/theme/_checkbox.scss +16 -20
  99. package/src/scss/theme/_code-vscode-dark.scss +184 -0
  100. package/src/scss/theme/_code-vscode-light.scss +179 -0
  101. package/src/scss/theme/_code.scss +9 -114
  102. package/src/scss/theme/_comment-editor-cm.scss +97 -0
  103. package/src/scss/theme/_comment-editor.scss +129 -0
  104. package/src/scss/theme/_comments.scss +66 -0
  105. package/src/scss/theme/_content.scss +33 -5
  106. package/src/scss/theme/_conversations.scss +19 -78
  107. package/src/scss/theme/_dropdown.scss +102 -15
  108. package/src/scss/theme/_embed.scss +135 -0
  109. package/src/scss/theme/_facepile.scss +11 -0
  110. package/src/scss/theme/_filebrowser.scss +1 -1
  111. package/src/scss/theme/_files.scss +77 -48
  112. package/src/scss/theme/_grid.scss +8 -0
  113. package/src/scss/theme/_icons.scss +155 -19
  114. package/src/scss/theme/_image-grid.scss +7 -10
  115. package/src/scss/theme/_input.scss +160 -0
  116. package/src/scss/theme/_item.scss +169 -0
  117. package/src/scss/theme/_list.scss +57 -0
  118. package/src/scss/theme/_meeting.scss +11 -0
  119. package/src/scss/theme/_message-editor-cm.scss +95 -0
  120. package/src/scss/theme/_message-editor.scss +66 -20
  121. package/src/scss/theme/_messages.scss +51 -105
  122. package/src/scss/theme/_meta.scss +12 -0
  123. package/src/scss/theme/_overlays.scss +31 -76
  124. package/src/scss/theme/_pager.scss +5 -1
  125. package/src/scss/theme/_pane.scss +13 -2
  126. package/src/scss/theme/_panels.scss +34 -25
  127. package/src/scss/theme/_picker-list.scss +5 -3
  128. package/src/scss/theme/_placeholder.scss +19 -0
  129. package/src/scss/theme/_poll.scss +49 -0
  130. package/src/scss/theme/_post-editor-cm.scss +100 -0
  131. package/src/scss/theme/_post-editor.scss +127 -0
  132. package/src/scss/theme/_post.scss +83 -0
  133. package/src/scss/theme/_preview-code.scss +14 -0
  134. package/src/scss/theme/_preview-embed.scss +11 -5
  135. package/src/scss/theme/_preview-image.scss +8 -26
  136. package/src/scss/theme/_preview-media.scss +1 -0
  137. package/src/scss/theme/_preview-pdf.scss +10 -15
  138. package/src/scss/theme/_preview-text.scss +1 -1
  139. package/src/scss/theme/_preview.scss +59 -76
  140. package/src/scss/theme/_reactions.scss +48 -17
  141. package/src/scss/theme/_sheet.scss +59 -0
  142. package/src/scss/theme/_sidebar.scss +86 -0
  143. package/src/scss/theme/_spinner.scss +11 -7
  144. package/src/scss/theme/_tab.scss +72 -0
  145. package/src/scss/theme/_tables.scss +70 -23
  146. package/src/scss/theme/_toasts.scss +56 -26
  147. package/src/scss/theme/_type.scss +41 -0
  148. package/src/scss/theme/{mixins → base}/_backdrop.scss +0 -0
  149. package/src/scss/theme/{bootstrap/mixins → base}/_breakpoints.scss +9 -0
  150. package/src/scss/theme/base/_colors.scss +315 -0
  151. package/src/scss/theme/base/_md.scss +19 -0
  152. package/src/scss/theme/base/_palette.scss +130 -0
  153. package/src/scss/theme/{mixins → base}/_position.scss +5 -5
  154. package/src/scss/theme/base/_reboot.scss +51 -0
  155. package/src/scss/theme/base/_scroll.scss +180 -0
  156. package/src/scss/theme/base/_svg.scss +49 -0
  157. package/src/scss/theme/base/_text.scss +23 -0
  158. package/src/scss/theme/base/_vars.scss +203 -0
  159. package/src/scss/theme/{fonts → base/fonts}/_fontmapping-roboto.scss +0 -0
  160. package/src/scss/theme/{fonts → base/fonts}/_fontmapping-segoe-ui.scss +0 -0
  161. package/src/scss/theme/base/fonts/_index.scss +2 -0
  162. package/src/scss/weavy-chat.scss +11 -4
  163. package/src/scss/weavy-messenger.scss +38 -21
  164. package/src/types/Chat.ts +2 -1
  165. package/src/types/Message.ts +3 -1
  166. package/src/types/types.ts +72 -10
  167. package/src/ui/Icon.tsx +1 -1
  168. package/src/ui/Spinner.tsx +19 -0
  169. package/src/utils/fileUtilities.ts +11 -125
  170. package/src/utils/infiniteScroll.js +11 -2
  171. package/src/utils/postal-parent.js +398 -0
  172. package/src/utils/promise.js +187 -0
  173. package/src/utils/scrollbarDetection.js +68 -9
  174. package/src/utils/utils.js +547 -0
  175. package/src/scss/theme/_attachments.scss +0 -74
  176. package/src/scss/theme/_cm-editor.scss +0 -42
  177. package/src/scss/theme/_colors.scss +0 -520
  178. package/src/scss/theme/_config.scss +0 -6
  179. package/src/scss/theme/_inputs.scss +0 -28
  180. package/src/scss/theme/_nav.scss +0 -52
  181. package/src/scss/theme/_palette.scss +0 -165
  182. package/src/scss/theme/_preview-icon.scss +0 -41
  183. package/src/scss/theme/_reboot.scss +0 -41
  184. package/src/scss/theme/_root.scss +0 -2
  185. package/src/scss/theme/_scroll.scss +0 -55
  186. package/src/scss/theme/_search.scss +0 -68
  187. package/src/scss/theme/_turbo.scss +0 -17
  188. package/src/scss/theme/_variables.scss +0 -139
  189. package/src/scss/theme/bootstrap/_accordion.scss +0 -146
  190. package/src/scss/theme/bootstrap/_alert.scss +0 -71
  191. package/src/scss/theme/bootstrap/_badge.scss +0 -38
  192. package/src/scss/theme/bootstrap/_breadcrumb.scss +0 -40
  193. package/src/scss/theme/bootstrap/_button-group.scss +0 -142
  194. package/src/scss/theme/bootstrap/_buttons.scss +0 -186
  195. package/src/scss/theme/bootstrap/_card.scss +0 -234
  196. package/src/scss/theme/bootstrap/_carousel.scss +0 -229
  197. package/src/scss/theme/bootstrap/_close.scss +0 -40
  198. package/src/scss/theme/bootstrap/_containers.scss +0 -41
  199. package/src/scss/theme/bootstrap/_dropdown.scss +0 -248
  200. package/src/scss/theme/bootstrap/_forms.scss +0 -9
  201. package/src/scss/theme/bootstrap/_functions.scss +0 -302
  202. package/src/scss/theme/bootstrap/_grid.scss +0 -33
  203. package/src/scss/theme/bootstrap/_helpers.scss +0 -10
  204. package/src/scss/theme/bootstrap/_images.scss +0 -42
  205. package/src/scss/theme/bootstrap/_list-group.scss +0 -191
  206. package/src/scss/theme/bootstrap/_maps.scss +0 -54
  207. package/src/scss/theme/bootstrap/_mixins.scss +0 -43
  208. package/src/scss/theme/bootstrap/_modal.scss +0 -237
  209. package/src/scss/theme/bootstrap/_nav.scss +0 -172
  210. package/src/scss/theme/bootstrap/_navbar.scss +0 -276
  211. package/src/scss/theme/bootstrap/_offcanvas.scss +0 -143
  212. package/src/scss/theme/bootstrap/_pagination.scss +0 -109
  213. package/src/scss/theme/bootstrap/_placeholders.scss +0 -51
  214. package/src/scss/theme/bootstrap/_popover.scss +0 -196
  215. package/src/scss/theme/bootstrap/_progress.scss +0 -59
  216. package/src/scss/theme/bootstrap/_reboot.scss +0 -610
  217. package/src/scss/theme/bootstrap/_root.scss +0 -73
  218. package/src/scss/theme/bootstrap/_spinners.scss +0 -85
  219. package/src/scss/theme/bootstrap/_tables.scss +0 -164
  220. package/src/scss/theme/bootstrap/_toasts.scss +0 -70
  221. package/src/scss/theme/bootstrap/_tooltip.scss +0 -120
  222. package/src/scss/theme/bootstrap/_transitions.scss +0 -27
  223. package/src/scss/theme/bootstrap/_type.scss +0 -106
  224. package/src/scss/theme/bootstrap/_utilities.scss +0 -647
  225. package/src/scss/theme/bootstrap/_variables.scss +0 -1633
  226. package/src/scss/theme/bootstrap/forms/_floating-labels.scss +0 -74
  227. package/src/scss/theme/bootstrap/forms/_form-check.scss +0 -175
  228. package/src/scss/theme/bootstrap/forms/_form-control.scss +0 -194
  229. package/src/scss/theme/bootstrap/forms/_form-range.scss +0 -91
  230. package/src/scss/theme/bootstrap/forms/_form-select.scss +0 -71
  231. package/src/scss/theme/bootstrap/forms/_form-text.scss +0 -11
  232. package/src/scss/theme/bootstrap/forms/_input-group.scss +0 -129
  233. package/src/scss/theme/bootstrap/forms/_labels.scss +0 -36
  234. package/src/scss/theme/bootstrap/forms/_validation.scss +0 -12
  235. package/src/scss/theme/bootstrap/helpers/_clearfix.scss +0 -3
  236. package/src/scss/theme/bootstrap/helpers/_color-bg.scss +0 -10
  237. package/src/scss/theme/bootstrap/helpers/_colored-links.scss +0 -12
  238. package/src/scss/theme/bootstrap/helpers/_position.scss +0 -36
  239. package/src/scss/theme/bootstrap/helpers/_ratio.scss +0 -26
  240. package/src/scss/theme/bootstrap/helpers/_stacks.scss +0 -15
  241. package/src/scss/theme/bootstrap/helpers/_stretched-link.scss +0 -15
  242. package/src/scss/theme/bootstrap/helpers/_text-truncation.scss +0 -7
  243. package/src/scss/theme/bootstrap/helpers/_visually-hidden.scss +0 -8
  244. package/src/scss/theme/bootstrap/helpers/_vr.scss +0 -8
  245. package/src/scss/theme/bootstrap/mixins/_alert.scss +0 -15
  246. package/src/scss/theme/bootstrap/mixins/_backdrop.scss +0 -14
  247. package/src/scss/theme/bootstrap/mixins/_banner.scss +0 -9
  248. package/src/scss/theme/bootstrap/mixins/_border-radius.scss +0 -78
  249. package/src/scss/theme/bootstrap/mixins/_box-shadow.scss +0 -18
  250. package/src/scss/theme/bootstrap/mixins/_buttons.scss +0 -70
  251. package/src/scss/theme/bootstrap/mixins/_caret.scss +0 -64
  252. package/src/scss/theme/bootstrap/mixins/_clearfix.scss +0 -9
  253. package/src/scss/theme/bootstrap/mixins/_color-scheme.scss +0 -7
  254. package/src/scss/theme/bootstrap/mixins/_container.scss +0 -11
  255. package/src/scss/theme/bootstrap/mixins/_deprecate.scss +0 -10
  256. package/src/scss/theme/bootstrap/mixins/_forms.scss +0 -152
  257. package/src/scss/theme/bootstrap/mixins/_gradients.scss +0 -47
  258. package/src/scss/theme/bootstrap/mixins/_grid.scss +0 -151
  259. package/src/scss/theme/bootstrap/mixins/_image.scss +0 -16
  260. package/src/scss/theme/bootstrap/mixins/_list-group.scss +0 -24
  261. package/src/scss/theme/bootstrap/mixins/_lists.scss +0 -7
  262. package/src/scss/theme/bootstrap/mixins/_pagination.scss +0 -10
  263. package/src/scss/theme/bootstrap/mixins/_reset-text.scss +0 -17
  264. package/src/scss/theme/bootstrap/mixins/_resize.scss +0 -6
  265. package/src/scss/theme/bootstrap/mixins/_table-variants.scss +0 -24
  266. package/src/scss/theme/bootstrap/mixins/_text-truncate.scss +0 -8
  267. package/src/scss/theme/bootstrap/mixins/_transition.scss +0 -26
  268. package/src/scss/theme/bootstrap/mixins/_utilities.scss +0 -97
  269. package/src/scss/theme/bootstrap/mixins/_visually-hidden.scss +0 -29
  270. package/src/scss/theme/bootstrap/utilities/_api.scss +0 -47
  271. package/src/scss/theme/bootstrap/vendor/_rfs.scss +0 -354
  272. package/src/scss/theme/bs/_badge.scss +0 -20
  273. package/src/scss/theme/bs/_buttons.scss +0 -185
  274. package/src/scss/theme/bs/_dropdown.scss +0 -86
  275. package/src/scss/theme/bs/_forms.scss +0 -161
  276. package/src/scss/theme/bs/_list-group.scss +0 -73
  277. package/src/scss/theme/bs/_tables.scss +0 -46
  278. package/src/scss/theme/fonts/_index.scss +0 -2
  279. package/src/scss/theme/mixins/_palette.scss +0 -165
  280. package/src/scss/theme/mixins/_scrollbar.scss +0 -110
@@ -1,13 +1,16 @@
1
1
  interface WeavyClient {
2
2
  url: string,
3
- tokenFactory: (() => string | Promise<string>),
3
+ tokenFactoryInternal: () => Promise<string>,
4
4
  subscribe: Function,
5
5
  unsubscribe: Function,
6
+ destroy: Function,
7
+ get: (url: string, retry?: boolean) => Promise<Response>,
8
+ post: (url: string, method: "GET" | "POST" | "PUT" | "DELETE" | "PATCH", body: string | FormData, contentType?: string, retry?: boolean) => Promise<Response>
6
9
  }
7
10
 
8
11
  type WeavyClientOptions = {
9
12
  url: string,
10
- tokenFactory: (() => string | Promise<string>)
13
+ tokenFactory: (refresh: boolean) => Promise<string>
11
14
  }
12
15
 
13
16
  type WeavyContextProps = {
@@ -21,6 +24,8 @@ type WeavyContextOptions = {
21
24
  enableCloudFiles?: boolean,
22
25
  enableScrollbarDetection?: boolean,
23
26
  filebrowserUrl?: string,
27
+ pdfWorkerUrl?: string,
28
+ pdfCMapsUrl?: string,
24
29
  reactions?: string[]
25
30
  }
26
31
 
@@ -87,9 +92,16 @@ type MemberType = {
87
92
  name: string,
88
93
  display_name: string,
89
94
  avatar_url: string,
90
- delivered_at: string,
91
- read_at: string,
92
- presence: string
95
+ delivered_at?: string,
96
+ read_at?: string,
97
+ presence: string,
98
+ marked_id?: number,
99
+ marked_at?: string
100
+
101
+ }
102
+
103
+ type MemberTypingType = MemberType & {
104
+ time: number
93
105
  }
94
106
 
95
107
  type MessageType = {
@@ -100,6 +112,7 @@ type MessageType = {
100
112
  temp?: boolean,
101
113
  created_at: string,
102
114
  created_by: MemberType,
115
+ created_by_id: number,
103
116
  attachments: AttachmentType[],
104
117
  attachment_ids: number[],
105
118
  meeting: MeetingCardType,
@@ -109,10 +122,11 @@ type MessageType = {
109
122
 
110
123
  type UserType = {
111
124
  id: number,
125
+ uid: string,
126
+ name: string,
112
127
  username: string,
113
128
  email: string,
114
- name: string,
115
- title: string,
129
+ display_name: string,
116
130
  avatar_url: string,
117
131
  presence: string
118
132
  }
@@ -132,12 +146,18 @@ type AttachmentType = {
132
146
  size: number,
133
147
  provider: string,
134
148
  download_url: string,
135
- preview_url: string,
149
+ embed_url: string,
150
+ external_url: string,
136
151
  thumbnail_url: string,
137
- external_url: string
152
+ preview_format: PreviewFormatType,
153
+ application_url: string,
154
+ preview_url: string,
155
+ created_at: string,
156
+ created_by?: UserType,
157
+ createdById?: number
138
158
  }
139
159
 
140
- type PreviewFormatType = "text"|"code"|"markup"|"image"|"video"|"audio"|"document"|"embed"|"link"|"download"|"none";
160
+ type PreviewFormatType = "audio"|"code"|"embed"|"html"|"image"|"pdf"|"text"|"video"|"none";
141
161
 
142
162
  type ReactionType = {
143
163
  id: number,
@@ -178,3 +198,45 @@ type BadgeType = {
178
198
  rooms: number,
179
199
  chat: number
180
200
  }
201
+
202
+ type EntityType = {
203
+ id: number,
204
+ type: string
205
+ }
206
+
207
+ type RealtimeMessage = {
208
+ action: string,
209
+ id: number,
210
+ actor: UserType,
211
+ message: MessageType
212
+ }
213
+
214
+ type RealtimeReaction = {
215
+ action: string,
216
+ id: number,
217
+ actor: UserType,
218
+ entity: EntityType,
219
+ reaction: string
220
+ }
221
+
222
+ type RealtimeApp = {
223
+ action: string,
224
+ id: number,
225
+ actor: UserType,
226
+ app: ConversationType
227
+ }
228
+
229
+ type RealtimeMember = {
230
+ action: string,
231
+ id: number,
232
+ actor: UserType,
233
+ app: ConversationType,
234
+ member: MemberType
235
+ }
236
+
237
+ type RealtimeTyping = {
238
+ action: string,
239
+ id: number,
240
+ actor: MemberTypingType,
241
+ conversation: ConversationType
242
+ }
package/src/ui/Icon.tsx CHANGED
@@ -103,7 +103,7 @@ const Icon = ({ name, color = "", size, ...props }: Props) => {
103
103
  let overlayPath = getIconOverlay(name);
104
104
 
105
105
  return (
106
- <span className={'wy-icon ' + color} style={{width: size && (size * 1.5 + "rem"), height: size && (size * 1.5 + "rem")}} { ...props }>
106
+ <span className={'wy-icon' + (color ? ' wy-icon-' + color : '')} style={{width: size && (size * 1.5 + "rem"), height: size && (size * 1.5 + "rem")}} { ...props }>
107
107
  {iconPath ? <MdiIcon.Icon color={color} path={iconPath} size={size} /> : name }
108
108
  {overlayPath && <MdiIcon.Icon color={color} path={overlayPath} className="wy-icon-overlay" size={(size || 1) / 2} /> }
109
109
  </span>
@@ -0,0 +1,19 @@
1
+ import React from 'react';
2
+ import classNames from 'classnames';
3
+
4
+ type SpinnerProps = {
5
+ size?: number,
6
+ spin?: boolean,
7
+ overlay?: boolean
8
+ }
9
+
10
+ const SpinnerImpl = ({ spin = true, size = 24, overlay= false }: SpinnerProps) => {
11
+
12
+ return (
13
+ <svg className={classNames("wy-spinner", {"wy-spin" : spin, "wy-spinner-overlay" : overlay })} width={size} height={size} viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><circle fill="none" cx="12" cy="12" r="11" strokeLinecap="butt" strokeWidth="2" /></svg>
14
+ )
15
+ }
16
+
17
+ // Export as replacable UI component
18
+ const UISpinner = { UI: SpinnerImpl };
19
+ export default UISpinner;
@@ -144,6 +144,16 @@ export function isVideo (ext: string) {
144
144
  }
145
145
  }
146
146
 
147
+ export function isMarkdown (ext: string) {
148
+ switch (ext) {
149
+ case ".markdown":
150
+ case ".md":
151
+ return true;
152
+ default:
153
+ return false;
154
+ }
155
+ }
156
+
147
157
  export function isMarkup (ext: string) {
148
158
  switch (ext) {
149
159
  case ".htm":
@@ -192,10 +202,6 @@ export function isCode (ext: string) {
192
202
  case ".lst":
193
203
  case ".m":
194
204
  case ".make":
195
- case ".markdown":
196
- case ".md":
197
- case ".mdown":
198
- case ".mkdn":
199
205
  case ".ml":
200
206
  case ".mm":
201
207
  case ".out":
@@ -228,7 +234,7 @@ export function isCode (ext: string) {
228
234
  }
229
235
 
230
236
  export function isText (ext: string) {
231
- if (isCode(ext)) {
237
+ if (isCode(ext) || isMarkdown(ext)) {
232
238
  return true;
233
239
  }
234
240
  switch (ext) {
@@ -261,99 +267,6 @@ export function isOfficeDocument(path: string) {
261
267
  }
262
268
  }
263
269
 
264
- export function canResize(path:string) {
265
- return isBitmap(path) || isMetaFile(path);
266
- }
267
-
268
- export function canConvertToImage (filename: string) {
269
- var ext = getExtension(filename);
270
- if (canResize(ext) || isText(ext)) {
271
- return true;
272
- }
273
- switch (ext) {
274
- case ".ai":
275
- case ".csv":
276
- case ".doc":
277
- case ".docm":
278
- case ".docx":
279
- case ".dot":
280
- case ".dotm":
281
- case ".dotx":
282
- case ".eml":
283
- case ".eps":
284
- case ".msg":
285
- case ".odp":
286
- case ".ods":
287
- case ".odt":
288
- case ".ott":
289
- case ".pdf":
290
- case ".potm":
291
- case ".potx":
292
- case ".ppt":
293
- case ".pptx":
294
- case ".pps":
295
- case ".ppsx":
296
- case ".pptm":
297
- case ".ppsm":
298
- case ".psd":
299
- case ".rtf":
300
- case ".svg":
301
- case ".xls":
302
- case ".xlsb":
303
- case ".xlsm":
304
- case ".xlsx":
305
- case ".xltm":
306
- case ".xltx":
307
- case ".webp":
308
- return true;
309
- default:
310
- return false;
311
- }
312
- }
313
-
314
- export function canConvertToPdf (filename: string) {
315
- var ext = getExtension(filename);
316
- switch (ext) {
317
- case ".ai":
318
- case ".doc":
319
- case ".docm":
320
- case ".docx":
321
- case ".dot":
322
- case ".dotm":
323
- case ".dotx":
324
- case ".eml":
325
- case ".html":
326
- case ".mhtml":
327
- case ".msg":
328
- case ".odt":
329
- case ".ott":
330
- case ".pdf":
331
- case ".rtf":
332
- case ".txt":
333
- case ".xml":
334
- case ".xls":
335
- case ".xlsb":
336
- case ".xlsm":
337
- case ".xlsx":
338
- case ".xltm":
339
- case ".xltx":
340
- case ".ods":
341
- case ".csv":
342
- case ".ppt":
343
- case ".pptx":
344
- case ".pps":
345
- case ".ppsx":
346
- case ".pptm":
347
- case ".ppsm":
348
- case ".potx":
349
- case ".potm":
350
- case ".odp":
351
- return true;
352
- default:
353
- return false;
354
- }
355
- }
356
-
357
270
  export function getIcon (name: string, mediaType?: string): { icon: string, color?: string } {
358
271
  var ext = getExtension(name);
359
272
 
@@ -408,31 +321,4 @@ export function getIcon (name: string, mediaType?: string): { icon: string, colo
408
321
 
409
322
  // fallback
410
323
  return { icon: "file" };
411
- }
412
-
413
- export function getPreviewFormat(filename:string): PreviewFormatType {
414
- var ext = getExtension(filename);
415
- if (isCode(ext)) {
416
- //return "code";
417
- }
418
- if (isText(ext)) {
419
- return "text";
420
- }
421
- if (isWebImage(ext)) {
422
- return "image";
423
- }
424
- if (isVideo(ext)) {
425
- return "video";
426
- }
427
- if (isAudio(ext)) {
428
- return "audio";
429
- }
430
- if (canConvertToPdf(ext)) {
431
- return "document";
432
- }
433
- if (canConvertToImage(ext)) {
434
- return "image";
435
- }
436
-
437
- return "none";
438
324
  }
@@ -9,6 +9,12 @@
9
9
  console.log("creating regular scroller");
10
10
  var parent = getScrollParent(observeElement);
11
11
 
12
+ // Disable scroll anchoring https://developer.mozilla.org/en-US/docs/Web/CSS/overflow-anchor/Guide_to_scroll_anchoring
13
+ parent.style.overflowAnchor = "none";
14
+
15
+ // Bug using scrollingElement in frames. See https://github.com/w3c/IntersectionObserver/issues/372
16
+ var intersectionParent = (parent === document.documentElement ? document : parent);
17
+
12
18
  whenNext ??= () => Promise.reject(new Error("No scroller handler function defined")); // default
13
19
 
14
20
  const nextObserver = new IntersectionObserver((entries, observer) => {
@@ -17,7 +23,7 @@
17
23
  whenNext();
18
24
  }
19
25
  });
20
- }, { root: parent, threshold: 0 });
26
+ }, { root: intersectionParent, threshold: 0, rootMargin: "500px" });
21
27
 
22
28
  nextObserver.observe(observeElement);
23
29
 
@@ -41,6 +47,9 @@ export function createReverseScroller(observeElement, whenNext) {
41
47
  // Disable scroll anchoring https://developer.mozilla.org/en-US/docs/Web/CSS/overflow-anchor/Guide_to_scroll_anchoring
42
48
  parent.style.overflowAnchor = "none";
43
49
 
50
+ // Bug using scrollingElement in frames. See https://github.com/w3c/IntersectionObserver/issues/372
51
+ var intersectionParent = (parent === document.documentElement ? document : parent);
52
+
44
53
  whenNext ??= () => Promise.reject(new Error("No reverse scroller handler function defined")); // default
45
54
 
46
55
  const prevObserver = new IntersectionObserver((entries, observer) => {
@@ -97,7 +106,7 @@ export function createReverseScroller(observeElement, whenNext) {
97
106
  }
98
107
  }
99
108
  })
100
- }, { root: parent, threshold: 0, rootMargin: "500px 0px 0px 0px" });
109
+ }, { root: intersectionParent, threshold: 0, rootMargin: "500px" });
101
110
 
102
111
  prevObserver.observe(observeElement);
103
112