@atlaskit/editor-common 78.33.4 → 78.35.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 (159) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/dist/cjs/i18n/cs.js +12 -2
  3. package/dist/cjs/i18n/da.js +12 -2
  4. package/dist/cjs/i18n/de.js +12 -2
  5. package/dist/cjs/i18n/en.js +11 -3
  6. package/dist/cjs/i18n/en_GB.js +11 -3
  7. package/dist/cjs/i18n/en_ZZ.js +20 -5
  8. package/dist/cjs/i18n/es.js +12 -2
  9. package/dist/cjs/i18n/fi.js +12 -2
  10. package/dist/cjs/i18n/fr.js +12 -2
  11. package/dist/cjs/i18n/hu.js +12 -2
  12. package/dist/cjs/i18n/it.js +12 -2
  13. package/dist/cjs/i18n/ja.js +13 -2
  14. package/dist/cjs/i18n/ko.js +13 -2
  15. package/dist/cjs/i18n/nb.js +12 -2
  16. package/dist/cjs/i18n/nl.js +14 -4
  17. package/dist/cjs/i18n/pl.js +12 -2
  18. package/dist/cjs/i18n/pt_BR.js +12 -2
  19. package/dist/cjs/i18n/ru.js +12 -2
  20. package/dist/cjs/i18n/sv.js +12 -2
  21. package/dist/cjs/i18n/th.js +12 -2
  22. package/dist/cjs/i18n/tr.js +13 -2
  23. package/dist/cjs/i18n/uk.js +12 -2
  24. package/dist/cjs/i18n/vi.js +12 -2
  25. package/dist/cjs/i18n/zh.js +12 -2
  26. package/dist/cjs/i18n/zh_TW.js +12 -2
  27. package/dist/cjs/monitoring/error.js +1 -1
  28. package/dist/cjs/portal/PortalBucket.js +44 -0
  29. package/dist/cjs/portal/PortalManager.js +209 -0
  30. package/dist/cjs/portal/index.js +26 -0
  31. package/dist/cjs/portal/usePortalProvider.js +80 -0
  32. package/dist/cjs/ui/DropList/index.js +1 -1
  33. package/dist/cjs/utils/insert-node-into-ordered-list.js +22 -3
  34. package/dist/es2019/i18n/cs.js +12 -2
  35. package/dist/es2019/i18n/da.js +12 -2
  36. package/dist/es2019/i18n/de.js +12 -2
  37. package/dist/es2019/i18n/en.js +11 -3
  38. package/dist/es2019/i18n/en_GB.js +11 -3
  39. package/dist/es2019/i18n/en_ZZ.js +20 -5
  40. package/dist/es2019/i18n/es.js +12 -2
  41. package/dist/es2019/i18n/fi.js +12 -2
  42. package/dist/es2019/i18n/fr.js +12 -2
  43. package/dist/es2019/i18n/hu.js +12 -2
  44. package/dist/es2019/i18n/it.js +12 -2
  45. package/dist/es2019/i18n/ja.js +13 -2
  46. package/dist/es2019/i18n/ko.js +13 -2
  47. package/dist/es2019/i18n/nb.js +12 -2
  48. package/dist/es2019/i18n/nl.js +14 -4
  49. package/dist/es2019/i18n/pl.js +12 -2
  50. package/dist/es2019/i18n/pt_BR.js +12 -2
  51. package/dist/es2019/i18n/ru.js +12 -2
  52. package/dist/es2019/i18n/sv.js +12 -2
  53. package/dist/es2019/i18n/th.js +12 -2
  54. package/dist/es2019/i18n/tr.js +13 -2
  55. package/dist/es2019/i18n/uk.js +12 -2
  56. package/dist/es2019/i18n/vi.js +12 -2
  57. package/dist/es2019/i18n/zh.js +12 -2
  58. package/dist/es2019/i18n/zh_TW.js +12 -2
  59. package/dist/es2019/monitoring/error.js +1 -1
  60. package/dist/es2019/portal/PortalBucket.js +29 -0
  61. package/dist/es2019/portal/PortalManager.js +157 -0
  62. package/dist/es2019/portal/index.js +3 -0
  63. package/dist/es2019/portal/usePortalProvider.js +58 -0
  64. package/dist/es2019/ui/DropList/index.js +1 -1
  65. package/dist/es2019/utils/insert-node-into-ordered-list.js +23 -3
  66. package/dist/esm/i18n/cs.js +12 -2
  67. package/dist/esm/i18n/da.js +12 -2
  68. package/dist/esm/i18n/de.js +12 -2
  69. package/dist/esm/i18n/en.js +11 -3
  70. package/dist/esm/i18n/en_GB.js +11 -3
  71. package/dist/esm/i18n/en_ZZ.js +20 -5
  72. package/dist/esm/i18n/es.js +12 -2
  73. package/dist/esm/i18n/fi.js +12 -2
  74. package/dist/esm/i18n/fr.js +12 -2
  75. package/dist/esm/i18n/hu.js +12 -2
  76. package/dist/esm/i18n/it.js +12 -2
  77. package/dist/esm/i18n/ja.js +13 -2
  78. package/dist/esm/i18n/ko.js +13 -2
  79. package/dist/esm/i18n/nb.js +12 -2
  80. package/dist/esm/i18n/nl.js +14 -4
  81. package/dist/esm/i18n/pl.js +12 -2
  82. package/dist/esm/i18n/pt_BR.js +12 -2
  83. package/dist/esm/i18n/ru.js +12 -2
  84. package/dist/esm/i18n/sv.js +12 -2
  85. package/dist/esm/i18n/th.js +12 -2
  86. package/dist/esm/i18n/tr.js +13 -2
  87. package/dist/esm/i18n/uk.js +12 -2
  88. package/dist/esm/i18n/vi.js +12 -2
  89. package/dist/esm/i18n/zh.js +12 -2
  90. package/dist/esm/i18n/zh_TW.js +12 -2
  91. package/dist/esm/monitoring/error.js +1 -1
  92. package/dist/esm/portal/PortalBucket.js +34 -0
  93. package/dist/esm/portal/PortalManager.js +202 -0
  94. package/dist/esm/portal/index.js +3 -0
  95. package/dist/esm/portal/usePortalProvider.js +70 -0
  96. package/dist/esm/ui/DropList/index.js +1 -1
  97. package/dist/esm/utils/insert-node-into-ordered-list.js +23 -3
  98. package/dist/types/i18n/cs.d.ts +10 -0
  99. package/dist/types/i18n/da.d.ts +10 -0
  100. package/dist/types/i18n/de.d.ts +10 -0
  101. package/dist/types/i18n/en.d.ts +8 -0
  102. package/dist/types/i18n/en_GB.d.ts +8 -0
  103. package/dist/types/i18n/en_ZZ.d.ts +16 -1
  104. package/dist/types/i18n/es.d.ts +10 -0
  105. package/dist/types/i18n/fi.d.ts +10 -0
  106. package/dist/types/i18n/fr.d.ts +10 -0
  107. package/dist/types/i18n/hu.d.ts +10 -0
  108. package/dist/types/i18n/it.d.ts +10 -0
  109. package/dist/types/i18n/ja.d.ts +11 -0
  110. package/dist/types/i18n/ko.d.ts +11 -0
  111. package/dist/types/i18n/nb.d.ts +10 -0
  112. package/dist/types/i18n/nl.d.ts +10 -0
  113. package/dist/types/i18n/pl.d.ts +10 -0
  114. package/dist/types/i18n/pt_BR.d.ts +10 -0
  115. package/dist/types/i18n/ru.d.ts +10 -0
  116. package/dist/types/i18n/sv.d.ts +10 -0
  117. package/dist/types/i18n/th.d.ts +10 -0
  118. package/dist/types/i18n/tr.d.ts +11 -0
  119. package/dist/types/i18n/uk.d.ts +10 -0
  120. package/dist/types/i18n/vi.d.ts +10 -0
  121. package/dist/types/i18n/zh.d.ts +10 -0
  122. package/dist/types/i18n/zh_TW.d.ts +10 -0
  123. package/dist/types/portal/PortalBucket.d.ts +18 -0
  124. package/dist/types/portal/PortalManager.d.ts +53 -0
  125. package/dist/types/portal/index.d.ts +3 -0
  126. package/dist/types/portal/usePortalProvider.d.ts +18 -0
  127. package/dist/types/types/annotation/index.d.ts +1 -0
  128. package/dist/types-ts4.5/i18n/cs.d.ts +10 -0
  129. package/dist/types-ts4.5/i18n/da.d.ts +10 -0
  130. package/dist/types-ts4.5/i18n/de.d.ts +10 -0
  131. package/dist/types-ts4.5/i18n/en.d.ts +8 -0
  132. package/dist/types-ts4.5/i18n/en_GB.d.ts +8 -0
  133. package/dist/types-ts4.5/i18n/en_ZZ.d.ts +16 -1
  134. package/dist/types-ts4.5/i18n/es.d.ts +10 -0
  135. package/dist/types-ts4.5/i18n/fi.d.ts +10 -0
  136. package/dist/types-ts4.5/i18n/fr.d.ts +10 -0
  137. package/dist/types-ts4.5/i18n/hu.d.ts +10 -0
  138. package/dist/types-ts4.5/i18n/it.d.ts +10 -0
  139. package/dist/types-ts4.5/i18n/ja.d.ts +11 -0
  140. package/dist/types-ts4.5/i18n/ko.d.ts +11 -0
  141. package/dist/types-ts4.5/i18n/nb.d.ts +10 -0
  142. package/dist/types-ts4.5/i18n/nl.d.ts +10 -0
  143. package/dist/types-ts4.5/i18n/pl.d.ts +10 -0
  144. package/dist/types-ts4.5/i18n/pt_BR.d.ts +10 -0
  145. package/dist/types-ts4.5/i18n/ru.d.ts +10 -0
  146. package/dist/types-ts4.5/i18n/sv.d.ts +10 -0
  147. package/dist/types-ts4.5/i18n/th.d.ts +10 -0
  148. package/dist/types-ts4.5/i18n/tr.d.ts +11 -0
  149. package/dist/types-ts4.5/i18n/uk.d.ts +10 -0
  150. package/dist/types-ts4.5/i18n/vi.d.ts +10 -0
  151. package/dist/types-ts4.5/i18n/zh.d.ts +10 -0
  152. package/dist/types-ts4.5/i18n/zh_TW.d.ts +10 -0
  153. package/dist/types-ts4.5/portal/PortalBucket.d.ts +18 -0
  154. package/dist/types-ts4.5/portal/PortalManager.d.ts +53 -0
  155. package/dist/types-ts4.5/portal/index.d.ts +3 -0
  156. package/dist/types-ts4.5/portal/usePortalProvider.d.ts +21 -0
  157. package/dist/types-ts4.5/types/annotation/index.d.ts +1 -0
  158. package/package.json +4 -3
  159. package/portal/package.json +15 -0
@@ -14,6 +14,7 @@ export default {
14
14
  'fabric.editor.addColumnRight': 'เพิ่มคอลัมน์ทางขวา',
15
15
  'fabric.editor.addCommentOnMedia': 'เพิ่มความคิดเห็น',
16
16
  'fabric.editor.addImageBorder': 'เพิ่มขอบ',
17
+ 'fabric.editor.addLoomVideo': 'เพิ่มวิดีโอ Loom',
17
18
  'fabric.editor.addMediaFiles': 'เพิ่มรูปภาพ วิดีโอ หรือไฟล์',
18
19
  'fabric.editor.addRowAbove': 'เพิ่มแถวด้านบน',
19
20
  'fabric.editor.addRowBelow': 'เพิ่มแถวด้านล่าง',
@@ -94,6 +95,9 @@ export default {
94
95
  'fabric.editor.customPanel.description': 'เพิ่มข้อความบันทึกพร้อมเอโมจิและพื้นหลังมีสีสัน',
95
96
  'fabric.editor.datasource.assetsObjects': 'Assets (เบต้า)',
96
97
  'fabric.editor.datasource.assetsObjects.description': 'แทรกหัวเรื่อง Assets ใน Jira Service Management ด้วยการค้นหาและตัวกรอง',
98
+ 'fabric.editor.datasource.assetsObjectsGeneralAvailability': 'Assets',
99
+ 'fabric.editor.datasource.confluenceSearch': 'แทรกรายการ Confluence',
100
+ 'fabric.editor.datasource.confluenceSearch.description': 'แทรกรายการผลลัพธ์การค้นหาจาก Confluence ด้วยการค้นหา ตัวกรอง และการกำหนดค่าที่ได้รับการปรับปรุงใหม่',
97
101
  'fabric.editor.datasource.jiraIssue': 'ปัญหา Jira',
98
102
  'fabric.editor.datasource.jiraIssue.description': 'แทรกปัญหา Jira จาก Jira Cloud ด้วยการค้นหา ตัวกรอง และการกำหนดค่าที่ได้รับการปรับปรุงใหม่',
99
103
  'fabric.editor.datasourceAppearanceTitle': 'รายการ',
@@ -103,6 +107,7 @@ export default {
103
107
  'fabric.editor.decision': 'การตัดสินใจ',
104
108
  'fabric.editor.decision.description': 'สร้างกรอบการตัดสินใจเพื่อให้คุณติดตามได้ง่าย',
105
109
  'fabric.editor.decisionPlaceholder': 'เพิ่มการตัดสินใจ…',
110
+ 'fabric.editor.decreaseColumnSize': 'ลดขนาดคอลัมน์',
106
111
  'fabric.editor.decreaseSize': 'ลดขนาด',
107
112
  'fabric.editor.defaultAltText': 'เอกสาร',
108
113
  'fabric.editor.description': 'คำอธิบาย',
@@ -223,6 +228,7 @@ export default {
223
228
  'fabric.editor.imageBorderSize': 'ขนาด',
224
229
  'fabric.editor.imageBorderSubtle': 'บาง',
225
230
  'fabric.editor.improvement': 'การปรับปรุง',
231
+ 'fabric.editor.increaseColumnSize': 'เพิ่มขนาดคอลัมน์',
226
232
  'fabric.editor.increaseSize': 'เพิ่มขนาด',
227
233
  'fabric.editor.indent': 'ย่อหน้าเข้า',
228
234
  'fabric.editor.info': 'ข้อมูล',
@@ -311,8 +317,8 @@ export default {
311
317
  'fabric.editor.placeholderTextPlaceholder': 'เพิ่มข้อความเจาะจง',
312
318
  'fabric.editor.plainText': 'ใช้ข้อความธรรมดา',
313
319
  'fabric.editor.quickInsert': 'แทรกด่วน',
314
- 'fabric.editor.recordVideo': 'บันทึกวิดีโอ',
315
- 'fabric.editor.recordVideo.description': 'บันทึกวิดีโอโดยใช้ Loom',
320
+ 'fabric.editor.recordVideo': 'บันทึกวิดีโอ Loom',
321
+ 'fabric.editor.recordVideo.description': 'บันทึกหน้าจอและกล้องของคุณ',
316
322
  'fabric.editor.redo': 'ทำซ้ำ',
317
323
  'fabric.editor.remove': 'ลบออก',
318
324
  'fabric.editor.removeColumns': '{0, plural, other {ลบคอลัมน์}}',
@@ -330,6 +336,7 @@ export default {
330
336
  'fabric.editor.rowDragHandle': 'ตัวเลือกแถว',
331
337
  'fabric.editor.saveButton': 'บันทึก',
332
338
  'fabric.editor.searchResults': '{itemsLength, plural, other {พบผลการค้นหา {itemsLength,number} รายการ ใช้คีย์ลูกศรขึ้นและลงเพื่อเลื่อนดูตัวเลือกต่าง ๆ กด Enter เพื่อเลือกตัวเลือก}}',
339
+ 'fabric.editor.selectColumnResize': 'เลือกปรับขนาดคอลัมน์',
333
340
  'fabric.editor.selectLanguage': 'เลือกภาษา',
334
341
  'fabric.editor.selectTableColumn': 'เลือกคอลัมน์ตาราง',
335
342
  'fabric.editor.selectTableRow': 'เลือกแถวตาราง',
@@ -413,10 +420,13 @@ export default {
413
420
  'fabric.editor.unsupportedBlockContent': 'โปรแกรมแก้ไขนี้ไม่รองรับการแสดงเนื้อหานี้',
414
421
  'fabric.editor.unsupportedContentTooltip': 'เนื้อหาไม่สามารถแสดงได้ในโปรแกรมแก้ไขนี้ ซึ่งจะมีการสำรองเนื้อหาไว้เมื่อคุณทำการแก้ไขและบันทึก',
415
422
  'fabric.editor.unsupportedInlineContent': 'เนื้อหาไม่ได้รับการรองรับ',
423
+ 'fabric.editor.upDown': 'เมื่อใช้คีย์ลูกศรเลื่อนขึ้นและลงในช่องป้อนข้อมูลต่อไปนี้ วันที่จะอัปเดตที่ด้านล่าง',
416
424
  'fabric.editor.url': 'แสดง URL',
417
425
  'fabric.editor.urlDescription': 'แสดงลิงก์เป็น URL',
418
426
  'fabric.editor.urlTitle': 'URL',
419
427
  'fabric.editor.useMarkdown': 'ใช้ Markdown',
428
+ 'fabric.editor.viewAndAddCommentsOnMedia': 'ดูและเพิ่มความคิดเห็น',
429
+ 'fabric.editor.viewCommentOnMedia': 'ดูความคิดเห็น',
420
430
  'fabric.editor.viewMore': 'ดูเพิ่มเติม',
421
431
  'fabric.editor.visit': 'เปิดลิงก์ในหน้าต่างใหม่',
422
432
  'fabric.editor.warning': 'คำเตือน',
@@ -14,6 +14,7 @@ export default {
14
14
  'fabric.editor.addColumnRight': 'Sağa sütun ekle',
15
15
  'fabric.editor.addCommentOnMedia': 'Yorum ekle',
16
16
  'fabric.editor.addImageBorder': 'Kenarlık ekle',
17
+ 'fabric.editor.addLoomVideo': 'Loom Videosu Ekle',
17
18
  'fabric.editor.addMediaFiles': 'Görsel, video ya da dosya ekle',
18
19
  'fabric.editor.addRowAbove': 'Yukarıya satır ekle',
19
20
  'fabric.editor.addRowBelow': 'Aşağıya satır ekle',
@@ -94,6 +95,9 @@ export default {
94
95
  'fabric.editor.customPanel.description': 'Emoji ve renkli arkaplan içeren bir not ekleyin',
95
96
  'fabric.editor.datasource.assetsObjects': 'Varlıklar (Beta)',
96
97
  'fabric.editor.datasource.assetsObjects.description': "Arama ve filtreleme ile Jira Service Management'taki Varlıklar'dan nesneleri ekleyin",
98
+ 'fabric.editor.datasource.assetsObjectsGeneralAvailability': 'Varlıklar',
99
+ 'fabric.editor.datasource.confluenceSearch': 'Confluence listesi ekleyin',
100
+ 'fabric.editor.datasource.confluenceSearch.description': "Gelişmiş arama, filtreleme ve yapılandırma ile Confluence'taki arama sonuçlarının listesini ekleyin.",
97
101
  'fabric.editor.datasource.jiraIssue': 'Jira Konuları',
98
102
  'fabric.editor.datasource.jiraIssue.description': "Gelişmiş arama, filtreleme ve yapılandırma ile Jira Cloud'daki Jira konularını ekleyin.",
99
103
  'fabric.editor.datasourceAppearanceTitle': 'Liste',
@@ -103,6 +107,7 @@ export default {
103
107
  'fabric.editor.decision': 'Karar',
104
108
  'fabric.editor.decision.description': 'Takibi kolaylaştırmak için kararları vurgulayın',
105
109
  'fabric.editor.decisionPlaceholder': 'Karar ekle…',
110
+ 'fabric.editor.decreaseColumnSize': 'Sütun boyutunu azalt',
106
111
  'fabric.editor.decreaseSize': 'Boyutu azalt',
107
112
  'fabric.editor.defaultAltText': 'Belge',
108
113
  'fabric.editor.description': 'Açıklama',
@@ -223,6 +228,7 @@ export default {
223
228
  'fabric.editor.imageBorderSize': 'Boyut',
224
229
  'fabric.editor.imageBorderSubtle': 'Göze çarpmayan',
225
230
  'fabric.editor.improvement': 'İyileştirme',
231
+ 'fabric.editor.increaseColumnSize': 'Sütun boyutunu artır',
226
232
  'fabric.editor.increaseSize': 'Boyutu artır',
227
233
  'fabric.editor.indent': 'Girintile',
228
234
  'fabric.editor.info': 'Bilgi',
@@ -311,8 +317,8 @@ export default {
311
317
  'fabric.editor.placeholderTextPlaceholder': 'Yer tutucu metin ekleyin',
312
318
  'fabric.editor.plainText': 'Düz metin kullan',
313
319
  'fabric.editor.quickInsert': 'Hızlı ekleme',
314
- 'fabric.editor.recordVideo': 'Video kaydet',
315
- 'fabric.editor.recordVideo.description': 'Loom kullanarak video kaydedin',
320
+ 'fabric.editor.recordVideo': 'Bir Loom videosu kaydedin',
321
+ 'fabric.editor.recordVideo.description': 'Ekranınızı ve kameranızı kaydedin',
316
322
  'fabric.editor.redo': 'Yinele',
317
323
  'fabric.editor.remove': 'Kaldır',
318
324
  'fabric.editor.removeColumns': '{0, plural, one {Sütunu sil} other {Sütunları sil}}',
@@ -330,6 +336,7 @@ export default {
330
336
  'fabric.editor.rowDragHandle': 'Satır seçenekleri',
331
337
  'fabric.editor.saveButton': 'Kaydet',
332
338
  'fabric.editor.searchResults': '{itemsLength, plural, one {{itemsLength,number} arama sonucu bulundu. Seçenekler arasında gezinmek için Yukarı ve Aşağı ok tuşlarını kullanın. Bir seçeneği belirlemek için lütfen Enter tuşuna basın.} other {{itemsLength,number} arama sonucu bulundu. Seçenekler arasında gezinmek için Yukarı ve Aşağı ok tuşlarını kullanın. Bir seçeneği belirlemek için lütfen Enter tuşuna basın.}}',
339
+ 'fabric.editor.selectColumnResize': 'Sütunun yeniden boyutlandırmasını seç',
333
340
  'fabric.editor.selectLanguage': 'Dil seçin',
334
341
  'fabric.editor.selectTableColumn': 'Tablo sütununu seç',
335
342
  'fabric.editor.selectTableRow': 'Tablo satırını seç',
@@ -368,6 +375,7 @@ export default {
368
375
  'fabric.editor.tables.adjustColumn': 'Sütunu ayarla',
369
376
  'fabric.editor.tables.columnResizeLast': 'Bu sütunu yalnızca sola doğru yeniden boyutlandırabilirsiniz.',
370
377
  'fabric.editor.tables.columnResizeOverflow': 'Bu sütunu yalnızca tabloda kaydırma çubuğu varken yeniden boyutlandırabilirsiniz.',
378
+ 'fabric.editor.tables.columnWidth': '{width, plural, one {Sütun genişliği {width} piksel olarak değiştirildi} other {Sütun genişliği {width} piksel olarak değiştirildi}}',
371
379
  'fabric.editor.tables.confirmDeleteLinkedModalMessage': '{nodeName} düğümünün silinmesi, bu düğüme bağlı her şeyin bozulmasına neden olur.',
372
380
  'fabric.editor.tables.confirmDeleteLinkedModalOKButton': 'Sil',
373
381
  'fabric.editor.tables.resizeStop': 'Yeniden boyutlandırma durduruldu',
@@ -412,10 +420,13 @@ export default {
412
420
  'fabric.editor.unsupportedBlockContent': 'Bu düzenleyici bu içeriğin görüntülenmesini desteklemiyor',
413
421
  'fabric.editor.unsupportedContentTooltip': 'İçerik bu düzenleyicide kullanılamıyor, düzenleyip kaydettiğinizde korunacak',
414
422
  'fabric.editor.unsupportedInlineContent': 'Desteklenmeyen içerik',
423
+ 'fabric.editor.upDown': 'Aşağıdaki girdi alanında yukarı ve aşağı ok tuşlarını kullandığınızda tarih aşağıda güncellenir',
415
424
  'fabric.editor.url': "URL'yi göster",
416
425
  'fabric.editor.urlDescription': 'Bağlantıyı URL olarak gösterir',
417
426
  'fabric.editor.urlTitle': 'URL',
418
427
  'fabric.editor.useMarkdown': 'Markdown kullan',
428
+ 'fabric.editor.viewAndAddCommentsOnMedia': 'Yorumları görüntüleyin ve ekleyin',
429
+ 'fabric.editor.viewCommentOnMedia': 'Yorumları görüntüle',
419
430
  'fabric.editor.viewMore': 'Daha fazla göster',
420
431
  'fabric.editor.visit': 'Bağlantıyı yeni pencerede aç',
421
432
  'fabric.editor.warning': 'Uyarı',
@@ -14,6 +14,7 @@ export default {
14
14
  'fabric.editor.addColumnRight': 'Додати стовпець справа',
15
15
  'fabric.editor.addCommentOnMedia': 'Додати коментар',
16
16
  'fabric.editor.addImageBorder': 'Додати рамку',
17
+ 'fabric.editor.addLoomVideo': 'Додати відео Loom',
17
18
  'fabric.editor.addMediaFiles': 'Додати зображення, відео або файл',
18
19
  'fabric.editor.addRowAbove': 'Додати рядок угорі',
19
20
  'fabric.editor.addRowBelow': 'Додати рядок знизу',
@@ -94,6 +95,9 @@ export default {
94
95
  'fabric.editor.customPanel.description': 'Додайте примітку з емодзі та кольоровим фоном',
95
96
  'fabric.editor.datasource.assetsObjects': 'Ресурси (бета-версія)',
96
97
  'fabric.editor.datasource.assetsObjects.description': 'Вставляйте об’єкти з розділу «Ресурси» в Jira Service Management за допомогою пошуку й фільтрації',
98
+ 'fabric.editor.datasource.assetsObjectsGeneralAvailability': 'Ресурси',
99
+ 'fabric.editor.datasource.confluenceSearch': 'Вставка списку Confluence',
100
+ 'fabric.editor.datasource.confluenceSearch.description': 'Вставте список результатів пошуку з Confluence із розширеним пошуком, фільтрацією та конфігурацією.',
97
101
  'fabric.editor.datasource.jiraIssue': 'Завдання в Jira',
98
102
  'fabric.editor.datasource.jiraIssue.description': 'Вставляйте завдання Jira з Jira Cloud за допомогою розширеного пошуку, фільтрації та конфігурації.',
99
103
  'fabric.editor.datasourceAppearanceTitle': 'Список',
@@ -103,6 +107,7 @@ export default {
103
107
  'fabric.editor.decision': 'Рішення',
104
108
  'fabric.editor.decision.description': 'Зафіксувати рішення, щоб його було легко знайти',
105
109
  'fabric.editor.decisionPlaceholder': 'Додати рішення...',
110
+ 'fabric.editor.decreaseColumnSize': 'Зменшити розмір стовпця',
106
111
  'fabric.editor.decreaseSize': 'Зменшити розмір',
107
112
  'fabric.editor.defaultAltText': 'Документ',
108
113
  'fabric.editor.description': 'Опис',
@@ -223,6 +228,7 @@ export default {
223
228
  'fabric.editor.imageBorderSize': 'Розмір',
224
229
  'fabric.editor.imageBorderSubtle': 'Тонка',
225
230
  'fabric.editor.improvement': 'Покращення',
231
+ 'fabric.editor.increaseColumnSize': 'Збільшити розмір стовпця',
226
232
  'fabric.editor.increaseSize': 'Збільшити розмір',
227
233
  'fabric.editor.indent': 'Збільшити відступ',
228
234
  'fabric.editor.info': 'Інформація',
@@ -311,8 +317,8 @@ export default {
311
317
  'fabric.editor.placeholderTextPlaceholder': 'Додати текст-заміщення',
312
318
  'fabric.editor.plainText': 'Застосувати текст без форматування',
313
319
  'fabric.editor.quickInsert': 'Швидка вставка',
314
- 'fabric.editor.recordVideo': 'Записати відео',
315
- 'fabric.editor.recordVideo.description': 'Запис відео за допомогою Loom',
320
+ 'fabric.editor.recordVideo': 'Запишіть відео в Loom',
321
+ 'fabric.editor.recordVideo.description': 'Зробіть запис екрана або зніміть відео',
316
322
  'fabric.editor.redo': 'Повторити',
317
323
  'fabric.editor.remove': 'Видалити',
318
324
  'fabric.editor.removeColumns': '{0, plural, one {Видалити стовпець} few {Видалити стовпці} many {Видалити стовпці} other {Видалити стовпці}}',
@@ -330,6 +336,7 @@ export default {
330
336
  'fabric.editor.rowDragHandle': 'Параметри рядків',
331
337
  'fabric.editor.saveButton': 'Зберегти',
332
338
  'fabric.editor.searchResults': '{itemsLength, plural, one {Доступний {itemsLength,number} результат пошуку. За допомогою клавіш зі стрілками переходьте вгору й униз між пунктами. Щоб вибрати потрібне, натисніть Enter.} few {Доступні {itemsLength,number} результати пошуку. За допомогою клавіш зі стрілками переходьте вгору й униз між пунктами. Щоб вибрати потрібне, натисніть Enter.} many {Доступні {itemsLength,number} результатів пошуку. За допомогою клавіш зі стрілками переходьте вгору й униз між пунктами. Щоб вибрати потрібне, натисніть Enter.} other {Доступні {itemsLength,number} результатів пошуку. За допомогою клавіш зі стрілками переходьте вгору й униз між пунктами. Щоб вибрати потрібне, натисніть Enter.}}',
339
+ 'fabric.editor.selectColumnResize': 'Вибрати змінення розміру стовпця',
333
340
  'fabric.editor.selectLanguage': 'Вибір мови',
334
341
  'fabric.editor.selectTableColumn': 'Виберіть стовпець таблиці',
335
342
  'fabric.editor.selectTableRow': 'Виберіть рядок таблиці',
@@ -413,10 +420,13 @@ export default {
413
420
  'fabric.editor.unsupportedBlockContent': 'Цей редактор не підтримує відображення такого вмісту',
414
421
  'fabric.editor.unsupportedContentTooltip': 'У цьому редакторі вміст недоступний; під час внесення і збереження змін він залишиться незмінним',
415
422
  'fabric.editor.unsupportedInlineContent': 'Вміст не підтримується',
423
+ 'fabric.editor.upDown': 'Щоб оновити дату, можна скористатися клавішами зі стрілками вгору й униз у полі для введення даних нижче',
416
424
  'fabric.editor.url': 'Показати URL-адресу',
417
425
  'fabric.editor.urlDescription': 'Показати посилання як URL-адресу',
418
426
  'fabric.editor.urlTitle': 'URL-адреса',
419
427
  'fabric.editor.useMarkdown': 'Застосувати розмітку тексту',
428
+ 'fabric.editor.viewAndAddCommentsOnMedia': 'Переглянути й додати коментарі',
429
+ 'fabric.editor.viewCommentOnMedia': 'Переглянути коментарі',
420
430
  'fabric.editor.viewMore': 'Докладніше',
421
431
  'fabric.editor.visit': 'Відкрити посилання в новому вікні',
422
432
  'fabric.editor.warning': 'Попередження',
@@ -14,6 +14,7 @@ export default {
14
14
  'fabric.editor.addColumnRight': 'Thêm cột bên phải',
15
15
  'fabric.editor.addCommentOnMedia': 'Thêm nhận xét',
16
16
  'fabric.editor.addImageBorder': 'Thêm viền',
17
+ 'fabric.editor.addLoomVideo': 'Thêm video Loom',
17
18
  'fabric.editor.addMediaFiles': 'Thêm ảnh, video hoặc tệp',
18
19
  'fabric.editor.addRowAbove': 'Thêm hàng bên trên',
19
20
  'fabric.editor.addRowBelow': 'Thêm hàng bên dưới',
@@ -94,6 +95,9 @@ export default {
94
95
  'fabric.editor.customPanel.description': 'Thêm ghi chú với biểu tượng cảm xúc và nền màu',
95
96
  'fabric.editor.datasource.assetsObjects': 'Tài sản (Beta)',
96
97
  'fabric.editor.datasource.assetsObjects.description': 'Chèn đối tượng từ Tài sản trong Jira Service Management bằng tính năng tìm kiếm và lọc',
98
+ 'fabric.editor.datasource.assetsObjectsGeneralAvailability': 'Tài sản',
99
+ 'fabric.editor.datasource.confluenceSearch': 'Chèn danh sách Confluence',
100
+ 'fabric.editor.datasource.confluenceSearch.description': 'Chèn danh sách kết quả tìm kiếm từ Confluence bằng tính năng tìm kiếm, lọc và định cấu hình nâng cao.',
97
101
  'fabric.editor.datasource.jiraIssue': 'Vấn đề trên Jira',
98
102
  'fabric.editor.datasource.jiraIssue.description': 'Chèn vấn đề trên Jira từ Jira Cloud bằng tính năng tìm kiếm, lọc và định cấu hình nâng cao.',
99
103
  'fabric.editor.datasourceAppearanceTitle': 'Danh sách',
@@ -103,6 +107,7 @@ export default {
103
107
  'fabric.editor.decision': 'Quyết định',
104
108
  'fabric.editor.decision.description': 'Thu thập các quyết định để dễ dàng theo dõi',
105
109
  'fabric.editor.decisionPlaceholder': 'Thêm quyết định…',
110
+ 'fabric.editor.decreaseColumnSize': 'Giảm kích thước cột',
106
111
  'fabric.editor.decreaseSize': 'Giảm kích thước',
107
112
  'fabric.editor.defaultAltText': 'Tài liệu',
108
113
  'fabric.editor.description': 'Mô tả',
@@ -223,6 +228,7 @@ export default {
223
228
  'fabric.editor.imageBorderSize': 'Kích cỡ',
224
229
  'fabric.editor.imageBorderSubtle': 'Nhạt',
225
230
  'fabric.editor.improvement': 'Cải tiến',
231
+ 'fabric.editor.increaseColumnSize': 'Tăng kích thước cột',
226
232
  'fabric.editor.increaseSize': 'Tăng kích thước',
227
233
  'fabric.editor.indent': 'Thụt lề',
228
234
  'fabric.editor.info': 'Thông tin',
@@ -311,8 +317,8 @@ export default {
311
317
  'fabric.editor.placeholderTextPlaceholder': 'Thêm văn bản giữ chỗ',
312
318
  'fabric.editor.plainText': 'Dùng văn bản thuần túy',
313
319
  'fabric.editor.quickInsert': 'Chèn nhanh',
314
- 'fabric.editor.recordVideo': 'Quay video',
315
- 'fabric.editor.recordVideo.description': 'Quay video bằng Loom',
320
+ 'fabric.editor.recordVideo': 'Quay video Loom',
321
+ 'fabric.editor.recordVideo.description': 'Quay lại màn hình và máy ảnh của bạn',
316
322
  'fabric.editor.redo': 'Làm lại',
317
323
  'fabric.editor.remove': 'Xóa',
318
324
  'fabric.editor.removeColumns': '{0, plural, other {Xóa cột}}',
@@ -330,6 +336,7 @@ export default {
330
336
  'fabric.editor.rowDragHandle': 'Tùy chọn hàng',
331
337
  'fabric.editor.saveButton': 'Lưu',
332
338
  'fabric.editor.searchResults': '{itemsLength, plural, other {Có {itemsLength,number} kết quả tìm kiếm. Dùng phím mũi tên Lên và Xuống để di chuyển giữa các kết quả. Nhấn Enter để chọn một kết quả.}}',
339
+ 'fabric.editor.selectColumnResize': 'Chọn kích thước cột',
333
340
  'fabric.editor.selectLanguage': 'Chọn ngôn ngữ',
334
341
  'fabric.editor.selectTableColumn': 'Chọn cột trong bảng',
335
342
  'fabric.editor.selectTableRow': 'Chọn hàng trong bảng',
@@ -413,10 +420,13 @@ export default {
413
420
  'fabric.editor.unsupportedBlockContent': 'Trình biên tập này không hỗ trợ hiển thị nội dung này',
414
421
  'fabric.editor.unsupportedContentTooltip': 'Nội dung không có trong trình biên tập này, nội dung sẽ được bảo lưu khi bạn sửa và lưu',
415
422
  'fabric.editor.unsupportedInlineContent': 'Nội dung không được hỗ trợ',
423
+ 'fabric.editor.upDown': 'Khi bạn sử dụng các phím mũi tên lên và xuống vào trường nhập sau, ngày sẽ cập nhật bên dưới',
416
424
  'fabric.editor.url': 'Hiển thị URL',
417
425
  'fabric.editor.urlDescription': 'Hiển thị liên kết dưới dạng URL',
418
426
  'fabric.editor.urlTitle': 'URL',
419
427
  'fabric.editor.useMarkdown': 'Dùng Markdown',
428
+ 'fabric.editor.viewAndAddCommentsOnMedia': 'Xem và thêm nhận xét',
429
+ 'fabric.editor.viewCommentOnMedia': 'Xem nhận xét',
420
430
  'fabric.editor.viewMore': 'Xem thêm',
421
431
  'fabric.editor.visit': 'Mở liên kết trong cửa sổ mới',
422
432
  'fabric.editor.warning': 'Cảnh báo',
@@ -14,6 +14,7 @@ export default {
14
14
  'fabric.editor.addColumnRight': '在右侧添加列',
15
15
  'fabric.editor.addCommentOnMedia': '添加注释',
16
16
  'fabric.editor.addImageBorder': '添加边框',
17
+ 'fabric.editor.addLoomVideo': '添加 Loom 视频',
17
18
  'fabric.editor.addMediaFiles': '添加图像、视频或文件',
18
19
  'fabric.editor.addRowAbove': '在上方添加行',
19
20
  'fabric.editor.addRowBelow': '在下方添加行',
@@ -94,6 +95,9 @@ export default {
94
95
  'fabric.editor.customPanel.description': '使用表情和彩色背景来添加注释',
95
96
  'fabric.editor.datasource.assetsObjects': '资产(测试版)',
96
97
  'fabric.editor.datasource.assetsObjects.description': '通过搜索和筛选插入来自 Jira Service Management 中的资产的对象',
98
+ 'fabric.editor.datasource.assetsObjectsGeneralAvailability': '资产',
99
+ 'fabric.editor.datasource.confluenceSearch': '插入 Confluence 列表',
100
+ 'fabric.editor.datasource.confluenceSearch.description': '通过增强的搜索、筛选和配置插入来自 Confluence 的搜索结果列表。',
97
101
  'fabric.editor.datasource.jiraIssue': 'Jira 事务',
98
102
  'fabric.editor.datasource.jiraIssue.description': '通过增强的搜索、筛选和配置插入来自 Jira Cloud 的 Jira 事务。',
99
103
  'fabric.editor.datasourceAppearanceTitle': '列表',
@@ -103,6 +107,7 @@ export default {
103
107
  'fabric.editor.decision': '决定',
104
108
  'fabric.editor.decision.description': '捕获决策,以便轻松跟踪',
105
109
  'fabric.editor.decisionPlaceholder': '添加决定...',
110
+ 'fabric.editor.decreaseColumnSize': '减小列大小',
106
111
  'fabric.editor.decreaseSize': '减小大小',
107
112
  'fabric.editor.defaultAltText': '文档',
108
113
  'fabric.editor.description': '描述',
@@ -223,6 +228,7 @@ export default {
223
228
  'fabric.editor.imageBorderSize': '大小',
224
229
  'fabric.editor.imageBorderSubtle': '细微',
225
230
  'fabric.editor.improvement': '改进',
231
+ 'fabric.editor.increaseColumnSize': '增大列大小',
226
232
  'fabric.editor.increaseSize': '增大大小',
227
233
  'fabric.editor.indent': '增大缩进',
228
234
  'fabric.editor.info': '信息',
@@ -311,8 +317,8 @@ export default {
311
317
  'fabric.editor.placeholderTextPlaceholder': '添加占位文本',
312
318
  'fabric.editor.plainText': '使用纯文本',
313
319
  'fabric.editor.quickInsert': '快速插入',
314
- 'fabric.editor.recordVideo': '录制视频',
315
- 'fabric.editor.recordVideo.description': '使用 Loom 录制视频',
320
+ 'fabric.editor.recordVideo': '录制 Loom 视频',
321
+ 'fabric.editor.recordVideo.description': '录制您的屏幕内容和摄像头画面',
316
322
  'fabric.editor.redo': '重做',
317
323
  'fabric.editor.remove': '删除',
318
324
  'fabric.editor.removeColumns': '{0, plural, other {删除列}}',
@@ -330,6 +336,7 @@ export default {
330
336
  'fabric.editor.rowDragHandle': '行选项',
331
337
  'fabric.editor.saveButton': '保存',
332
338
  'fabric.editor.searchResults': '{itemsLength, plural, other {有 {itemsLength,number} 个搜索结果。使用向上和向下箭头键可浏览这些选项。按 Enter 键可选择选项。}}',
339
+ 'fabric.editor.selectColumnResize': '选择列大小调整',
333
340
  'fabric.editor.selectLanguage': '选择语言',
334
341
  'fabric.editor.selectTableColumn': '选择表格列',
335
342
  'fabric.editor.selectTableRow': '选择表格行',
@@ -413,10 +420,13 @@ export default {
413
420
  'fabric.editor.unsupportedBlockContent': '此编辑器不支持显示此内容',
414
421
  'fabric.editor.unsupportedContentTooltip': '此编辑器中的内容不可用,在编辑和保存时将保留此内容',
415
422
  'fabric.editor.unsupportedInlineContent': '内容不受支持',
423
+ 'fabric.editor.upDown': '在以下输入字段中使用向上和向下箭头键时,日期将在下方更新',
416
424
  'fabric.editor.url': '显示 URL',
417
425
  'fabric.editor.urlDescription': '以 URL 显示链接',
418
426
  'fabric.editor.urlTitle': 'URL',
419
427
  'fabric.editor.useMarkdown': '使用 Markdown',
428
+ 'fabric.editor.viewAndAddCommentsOnMedia': '查看并添加评论',
429
+ 'fabric.editor.viewCommentOnMedia': '查看评论',
420
430
  'fabric.editor.viewMore': '查看更多',
421
431
  'fabric.editor.visit': '在新窗口中打开链接',
422
432
  'fabric.editor.warning': '警告',
@@ -14,6 +14,7 @@ export default {
14
14
  'fabric.editor.addColumnRight': '新增右欄',
15
15
  'fabric.editor.addCommentOnMedia': '新增留言',
16
16
  'fabric.editor.addImageBorder': '新增邊框',
17
+ 'fabric.editor.addLoomVideo': '新增 Loom 影片',
17
18
  'fabric.editor.addMediaFiles': '新增圖片、影片或檔案',
18
19
  'fabric.editor.addRowAbove': '在上方新增列',
19
20
  'fabric.editor.addRowBelow': '在下方新增列',
@@ -94,6 +95,9 @@ export default {
94
95
  'fabric.editor.customPanel.description': '新增一個帶有表情符號和彩色背景的附註',
95
96
  'fabric.editor.datasource.assetsObjects': 'Assets (測試版)',
96
97
  'fabric.editor.datasource.assetsObjects.description': '透過搜尋和篩選,從 Jira Service Management 中的 Assets 插入物件',
98
+ 'fabric.editor.datasource.assetsObjectsGeneralAvailability': 'Assets',
99
+ 'fabric.editor.datasource.confluenceSearch': '插入 Confluence 列表',
100
+ 'fabric.editor.datasource.confluenceSearch.description': '插入 Confluence 搜尋結果列表,包含增強的搜尋、篩選和組態。',
97
101
  'fabric.editor.datasource.jiraIssue': 'Jira 議題',
98
102
  'fabric.editor.datasource.jiraIssue.description': '透過增強的搜尋、篩選和組態,從 Jira Cloud 插入 Jira 議題。',
99
103
  'fabric.editor.datasourceAppearanceTitle': '列表',
@@ -103,6 +107,7 @@ export default {
103
107
  'fabric.editor.decision': '決定',
104
108
  'fabric.editor.decision.description': '擷取決定以便追蹤',
105
109
  'fabric.editor.decisionPlaceholder': '新增決定…',
110
+ 'fabric.editor.decreaseColumnSize': '縮小欄大小',
106
111
  'fabric.editor.decreaseSize': '縮減大小',
107
112
  'fabric.editor.defaultAltText': '文件',
108
113
  'fabric.editor.description': '描述',
@@ -223,6 +228,7 @@ export default {
223
228
  'fabric.editor.imageBorderSize': '大小',
224
229
  'fabric.editor.imageBorderSubtle': '不明顯的',
225
230
  'fabric.editor.improvement': '改善',
231
+ 'fabric.editor.increaseColumnSize': '放大欄大小',
226
232
  'fabric.editor.increaseSize': '增加大小',
227
233
  'fabric.editor.indent': '增加縮排',
228
234
  'fabric.editor.info': '資訊',
@@ -311,8 +317,8 @@ export default {
311
317
  'fabric.editor.placeholderTextPlaceholder': '新增預留位置文字',
312
318
  'fabric.editor.plainText': '使用純文字',
313
319
  'fabric.editor.quickInsert': '快速插入',
314
- 'fabric.editor.recordVideo': '錄製影片',
315
- 'fabric.editor.recordVideo.description': '使用 Loom 錄製影片',
320
+ 'fabric.editor.recordVideo': '錄製 Loom 影片',
321
+ 'fabric.editor.recordVideo.description': '錄製您的螢幕畫面和相機',
316
322
  'fabric.editor.redo': '重做',
317
323
  'fabric.editor.remove': '移除',
318
324
  'fabric.editor.removeColumns': '{0, plural, other {刪除直欄}}',
@@ -330,6 +336,7 @@ export default {
330
336
  'fabric.editor.rowDragHandle': '列選項',
331
337
  'fabric.editor.saveButton': '儲存',
332
338
  'fabric.editor.searchResults': '{itemsLength, plural, other {有 {itemsLength,number} 個搜尋結果。請使用向上鍵和向下鍵導覽選項。按 Enter 鍵可選取選項。}}',
339
+ 'fabric.editor.selectColumnResize': '選取欄重新調整大小',
333
340
  'fabric.editor.selectLanguage': '選取語言',
334
341
  'fabric.editor.selectTableColumn': '選取表格欄',
335
342
  'fabric.editor.selectTableRow': '選取表格列',
@@ -413,10 +420,13 @@ export default {
413
420
  'fabric.editor.unsupportedBlockContent': '此編輯器不支援顯示此內容',
414
421
  'fabric.editor.unsupportedContentTooltip': '內容不適用於此編輯器,這會在您編輯和儲存時進行保留',
415
422
  'fabric.editor.unsupportedInlineContent': '不支援的內容',
423
+ 'fabric.editor.upDown': '在下列輸入欄位中使用向上和向下箭頭按鍵時,日期將在下方更新',
416
424
  'fabric.editor.url': '顯示 URL',
417
425
  'fabric.editor.urlDescription': '將連結顯示為 URL',
418
426
  'fabric.editor.urlTitle': 'URL',
419
427
  'fabric.editor.useMarkdown': '使用 Markdown',
428
+ 'fabric.editor.viewAndAddCommentsOnMedia': '檢視和新增留言',
429
+ 'fabric.editor.viewCommentOnMedia': '檢視留言',
420
430
  'fabric.editor.viewMore': '檢視更多',
421
431
  'fabric.editor.visit': '在新視窗中開啟連結',
422
432
  'fabric.editor.warning': '警告',
@@ -1,6 +1,6 @@
1
1
  const SENTRY_DSN = 'https://0b10c8e02fb44d8796c047b102c9bee8@o55978.ingest.sentry.io/4505129224110080';
2
2
  const packageName = 'editor-common'; // Sentry doesn't accept '/' in its releases https://docs.sentry.io/platforms/javascript/configuration/releases/
3
- const packageVersion = "78.33.4";
3
+ const packageVersion = "78.35.0";
4
4
  const sanitiseSentryEvents = (data, _hint) => {
5
5
  // Remove URL as it has UGC
6
6
  // TODO: Sanitise the URL instead of just removing it
@@ -0,0 +1,29 @@
1
+ import React, { useLayoutEffect, useMemo, useState } from 'react';
2
+ /**
3
+ * A component for rendering portals managed by a `PortalManager`.
4
+ * It subscribes to a `PortalManager` instance to listen for changes in the portal content
5
+ * and renders the content of its assigned portal bucket.
6
+ *
7
+ * @param {PortalBucketProps} props The component props.
8
+ * @param {number} props.id The ID for the portal bucket. This ID is used by the `PortalManager` to manage the content of this bucket.
9
+ * @param {PortalManager} props.portalManager An instance of `PortalManager` which manages the registration and unregistration of portal buckets and their content.
10
+ * @returns {React.ReactElement} The React element(s) that are currently registered to this portal bucket.
11
+ */
12
+ export function PortalBucket({
13
+ id,
14
+ portalManager
15
+ }) {
16
+ // State to hold the current portals for this bucket
17
+ const [portals, setPortals] = useState({});
18
+ // Effect to register/unregister this bucket with the portal manager on mount/unmount
19
+ useLayoutEffect(() => {
20
+ portalManager.registerBucket(id, setPortals);
21
+ return () => {
22
+ portalManager.unregisterBucket(id);
23
+ };
24
+ }, [id, portalManager]);
25
+ // Memoize the portal elements to avoid unnecessary re-renders
26
+ const portalElements = useMemo(() => Object.values(portals), [portals]);
27
+ // Render the current portal elements
28
+ return /*#__PURE__*/React.createElement(React.Fragment, null, portalElements);
29
+ }
@@ -0,0 +1,157 @@
1
+ const DEFAULT_INITIAL_BUCKETS = 50;
2
+ const DEFAULT_MAX_BUCKET_CAPACITY = 50;
3
+ const DEFAULT_SCALE_RATIO = 0.5;
4
+
5
+ /**
6
+ * Creates an empty bucket object with a specified capacity. Each bucket is designed
7
+ * to hold a certain number of React portals and has an associated updater function
8
+ * which can be null initially.
9
+ *
10
+ * @function createEmptyBucket
11
+ * @param {number} capacity - The maximum capacity of the bucket.
12
+ * @returns {PortalBucketType} An object representing an empty bucket with the specified capacity.
13
+ */
14
+ function createEmptyBucket(capacity) {
15
+ return {
16
+ portals: {},
17
+ capacity,
18
+ updater: null
19
+ };
20
+ }
21
+
22
+ /**
23
+ * A utility class to manage and dynamically scale React portals across multiple buckets.
24
+ * It allows for efficient rendering of large numbers of React portals by distributing them
25
+ * across "buckets" and updating these buckets as necessary to balance load and performance.
26
+ *
27
+ * @class PortalManager
28
+ * @typedef {Object} PortalManager
29
+ *
30
+ * @property {number} maxBucketCapacity - The maximum capacity of each bucket before a new bucket is created.
31
+ * @property {number} scaleRatio - The ratio to determine the number of new buckets to add when scaling up.
32
+ * @property {Array<PortalBucketType>} buckets - An array of bucket objects where each bucket holds a record of React portals.
33
+ * @property {Set<number>} availableBuckets - A set of indices representing buckets that have available capacity.
34
+ * @property {Map<React.Key, number>} portalToBucketMap - A map of React portal keys to their corresponding bucket indices.
35
+ * @property {PortalRendererUpdater|null} portalRendererUpdater - A function to trigger updates to the rendering of portals.
36
+ * @property {number} scaleCapacityThreshold - The threshold at which the buckets are scaled up to accommodate more portals.
37
+ *
38
+ * @param {number} [initialBuckets=DEFAULT_INITIAL_BUCKETS] - The initial number of buckets to create.
39
+ * @param {number} [maxBucketCapacity=DEFAULT_MAX_BUCKET_CAPACITY] - The maximum number of portals a single bucket can hold.
40
+ * @param {number} [scaleRatio=DEFAULT_SCALE_RATIO] - The ratio used to calculate the number of new buckets to add when scaling.
41
+ */
42
+ export class PortalManager {
43
+ constructor(initialBuckets = DEFAULT_INITIAL_BUCKETS, maxBucketCapacity = DEFAULT_MAX_BUCKET_CAPACITY, scaleRatio = DEFAULT_SCALE_RATIO) {
44
+ this.maxBucketCapacity = maxBucketCapacity;
45
+ this.scaleRatio = scaleRatio;
46
+
47
+ // Initialise buckets array by creating an array of length `initialBuckets` containing empty buckets
48
+ this.buckets = Array.from({
49
+ length: initialBuckets
50
+ }, () => createEmptyBucket(maxBucketCapacity));
51
+ this.portalToBucketMap = new Map();
52
+ this.availableBuckets = new Set(Array.from({
53
+ length: initialBuckets
54
+ }, (_, i) => i));
55
+ this.portalRendererUpdater = null;
56
+ this.scaleCapacityThreshold = maxBucketCapacity / 2;
57
+ }
58
+ getCurrentBucket() {
59
+ return this.availableBuckets.values().next().value;
60
+ }
61
+ createBucket() {
62
+ var _this$portalRendererU;
63
+ const currentBucket = this.getCurrentBucket();
64
+
65
+ //If the current bucket has capacity, skip this logic
66
+ if (this.buckets[currentBucket].capacity > 0) {
67
+ return;
68
+ } else {
69
+ // The current bucket is full, delete the bucket from the list of available buckets
70
+ this.availableBuckets.delete(currentBucket);
71
+ }
72
+
73
+ // Skip creating new bucket if there are buckets still available
74
+ if (this.availableBuckets.size > 0) {
75
+ return;
76
+ }
77
+
78
+ // Scale the buckets up only if there are no available buckets left
79
+ // Calculate how many new buckets need to be added
80
+ const numBucketsToAdd = Math.floor(this.buckets.length * this.scaleRatio);
81
+ this.buckets = [...this.buckets];
82
+ for (let i = 0; i < numBucketsToAdd; i++) {
83
+ this.buckets.push(createEmptyBucket(this.maxBucketCapacity));
84
+ this.availableBuckets.add(this.buckets.length - 1);
85
+ }
86
+ (_this$portalRendererU = this.portalRendererUpdater) === null || _this$portalRendererU === void 0 ? void 0 : _this$portalRendererU.call(this, this.buckets);
87
+ }
88
+ getBuckets() {
89
+ return this.buckets;
90
+ }
91
+ registerBucket(id, updater) {
92
+ var _this$buckets$id$upda, _this$buckets$id;
93
+ this.buckets[id].updater = updater;
94
+ (_this$buckets$id$upda = (_this$buckets$id = this.buckets[id]).updater) === null || _this$buckets$id$upda === void 0 ? void 0 : _this$buckets$id$upda.call(_this$buckets$id, () => ({
95
+ ...this.buckets[id].portals
96
+ }));
97
+ }
98
+ unregisterBucket(id) {
99
+ this.buckets[id].updater = null;
100
+ }
101
+ updateBuckets(id) {
102
+ var _this$buckets$id$upda2, _this$buckets$id2;
103
+ (_this$buckets$id$upda2 = (_this$buckets$id2 = this.buckets[id]).updater) === null || _this$buckets$id$upda2 === void 0 ? void 0 : _this$buckets$id$upda2.call(_this$buckets$id2, () => {
104
+ // new object is required to trigger react updates
105
+ return {
106
+ ...this.buckets[id].portals
107
+ };
108
+ });
109
+ }
110
+ registerPortal(key, portal) {
111
+ var _this$portalToBucketM;
112
+ this.createBucket();
113
+ this.buckets[this.getCurrentBucket()].capacity -= 1;
114
+ const id = (_this$portalToBucketM = this.portalToBucketMap.get(key)) !== null && _this$portalToBucketM !== void 0 ? _this$portalToBucketM : this.getCurrentBucket();
115
+ this.portalToBucketMap.set(key, id);
116
+ if (this.buckets[id].portals[key] !== portal) {
117
+ this.buckets[id].portals[key] = portal;
118
+ this.updateBuckets(id);
119
+ }
120
+
121
+ //returns a function to unregister the portal
122
+ return () => {
123
+ delete this.buckets[id].portals[key];
124
+ this.portalToBucketMap.delete(key);
125
+ this.buckets[id].capacity += 1;
126
+ if (this.buckets[id].capacity > this.scaleCapacityThreshold) {
127
+ this.availableBuckets.add(id);
128
+ }
129
+ this.updateBuckets(id);
130
+ };
131
+ }
132
+ registerPortalRenderer(updater) {
133
+ if (!this.portalRendererUpdater) {
134
+ updater(() => this.buckets);
135
+ }
136
+ this.portalRendererUpdater = updater;
137
+ }
138
+ unregisterPortalRenderer() {
139
+ this.portalRendererUpdater = null;
140
+ }
141
+
142
+ /**
143
+ * Cleans up resources used by the PortalManager. This includes clearing all portals,
144
+ * unregistering all buckets, and resetting internal state.
145
+ */
146
+ destroy() {
147
+ // Iterate through each bucket and clear its portals and unset the updater function
148
+ this.buckets.forEach((bucket, id) => {
149
+ bucket.portals = {}; // Clearing all portals from the bucket
150
+ bucket.updater = null; // Unsetting the bucket's updater function
151
+ this.availableBuckets.add(id); // Mark all buckets as available
152
+ });
153
+ this.portalToBucketMap.clear();
154
+ this.portalRendererUpdater = null;
155
+ this.availableBuckets = new Set(this.buckets.map((_, index) => index));
156
+ }
157
+ }
@@ -0,0 +1,3 @@
1
+ export { PortalManager } from './PortalManager';
2
+ export { PortalBucket } from './PortalBucket';
3
+ export { usePortalProvider } from './usePortalProvider';