@abraca/nuxt 0.1.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 (299) hide show
  1. package/README.md +84 -0
  2. package/dist/module.d.mts +201 -0
  3. package/dist/module.json +12 -0
  4. package/dist/module.mjs +170 -0
  5. package/dist/runtime/components/ACollaborationUsers.d.vue.ts +11 -0
  6. package/dist/runtime/components/ACollaborationUsers.vue +48 -0
  7. package/dist/runtime/components/ACollaborationUsers.vue.d.ts +11 -0
  8. package/dist/runtime/components/AColorPicker.d.vue.ts +13 -0
  9. package/dist/runtime/components/AColorPicker.vue +71 -0
  10. package/dist/runtime/components/AColorPicker.vue.d.ts +13 -0
  11. package/dist/runtime/components/ACommandPalette.d.vue.ts +13 -0
  12. package/dist/runtime/components/ACommandPalette.vue +31 -0
  13. package/dist/runtime/components/ACommandPalette.vue.d.ts +13 -0
  14. package/dist/runtime/components/AConnectionStatus.d.vue.ts +13 -0
  15. package/dist/runtime/components/AConnectionStatus.vue +50 -0
  16. package/dist/runtime/components/AConnectionStatus.vue.d.ts +13 -0
  17. package/dist/runtime/components/ADocTypeSelect.d.vue.ts +10 -0
  18. package/dist/runtime/components/ADocTypeSelect.vue +34 -0
  19. package/dist/runtime/components/ADocTypeSelect.vue.d.ts +10 -0
  20. package/dist/runtime/components/ADocumentTree.d.vue.ts +53 -0
  21. package/dist/runtime/components/ADocumentTree.vue +350 -0
  22. package/dist/runtime/components/ADocumentTree.vue.d.ts +53 -0
  23. package/dist/runtime/components/AEditor.d.vue.ts +60 -0
  24. package/dist/runtime/components/AEditor.vue +174 -0
  25. package/dist/runtime/components/AEditor.vue.d.ts +60 -0
  26. package/dist/runtime/components/AFloatingWindow.d.vue.ts +24 -0
  27. package/dist/runtime/components/AFloatingWindow.vue +232 -0
  28. package/dist/runtime/components/AFloatingWindow.vue.d.ts +24 -0
  29. package/dist/runtime/components/AIconPicker.d.vue.ts +13 -0
  30. package/dist/runtime/components/AIconPicker.vue +257 -0
  31. package/dist/runtime/components/AIconPicker.vue.d.ts +13 -0
  32. package/dist/runtime/components/ANodePanel.d.vue.ts +15 -0
  33. package/dist/runtime/components/ANodePanel.vue +541 -0
  34. package/dist/runtime/components/ANodePanel.vue.d.ts +15 -0
  35. package/dist/runtime/components/ANotifications.d.vue.ts +7 -0
  36. package/dist/runtime/components/ANotifications.vue +75 -0
  37. package/dist/runtime/components/ANotifications.vue.d.ts +7 -0
  38. package/dist/runtime/components/APermissionGuard.d.vue.ts +21 -0
  39. package/dist/runtime/components/APermissionGuard.vue +22 -0
  40. package/dist/runtime/components/APermissionGuard.vue.d.ts +21 -0
  41. package/dist/runtime/components/APresence.d.vue.ts +43 -0
  42. package/dist/runtime/components/APresence.vue +36 -0
  43. package/dist/runtime/components/APresence.vue.d.ts +43 -0
  44. package/dist/runtime/components/AProvider.d.vue.ts +27 -0
  45. package/dist/runtime/components/AProvider.vue +42 -0
  46. package/dist/runtime/components/AProvider.vue.d.ts +27 -0
  47. package/dist/runtime/components/ARoleBadge.d.vue.ts +11 -0
  48. package/dist/runtime/components/ARoleBadge.vue +29 -0
  49. package/dist/runtime/components/ARoleBadge.vue.d.ts +11 -0
  50. package/dist/runtime/components/AVoiceBar.d.vue.ts +13 -0
  51. package/dist/runtime/components/AVoiceBar.vue +379 -0
  52. package/dist/runtime/components/AVoiceBar.vue.d.ts +13 -0
  53. package/dist/runtime/components/AVoiceTile.d.vue.ts +10 -0
  54. package/dist/runtime/components/AVoiceTile.vue +48 -0
  55. package/dist/runtime/components/AVoiceTile.vue.d.ts +10 -0
  56. package/dist/runtime/components/AWindowLayer.d.vue.ts +3 -0
  57. package/dist/runtime/components/AWindowLayer.vue +17 -0
  58. package/dist/runtime/components/AWindowLayer.vue.d.ts +3 -0
  59. package/dist/runtime/components/aware/AArea.d.vue.ts +42 -0
  60. package/dist/runtime/components/aware/AArea.vue +45 -0
  61. package/dist/runtime/components/aware/AArea.vue.d.ts +42 -0
  62. package/dist/runtime/components/aware/AAvatar.d.vue.ts +25 -0
  63. package/dist/runtime/components/aware/AAvatar.vue +86 -0
  64. package/dist/runtime/components/aware/AAvatar.vue.d.ts +25 -0
  65. package/dist/runtime/components/aware/AButton.d.vue.ts +7 -0
  66. package/dist/runtime/components/aware/AButton.vue +39 -0
  67. package/dist/runtime/components/aware/AButton.vue.d.ts +7 -0
  68. package/dist/runtime/components/aware/ACursorLabel.d.vue.ts +12 -0
  69. package/dist/runtime/components/aware/ACursorLabel.vue +44 -0
  70. package/dist/runtime/components/aware/ACursorLabel.vue.d.ts +12 -0
  71. package/dist/runtime/components/aware/ADocBadge.d.vue.ts +11 -0
  72. package/dist/runtime/components/aware/ADocBadge.vue +27 -0
  73. package/dist/runtime/components/aware/ADocBadge.vue.d.ts +11 -0
  74. package/dist/runtime/components/aware/AFacepile.d.vue.ts +20 -0
  75. package/dist/runtime/components/aware/AFacepile.vue +92 -0
  76. package/dist/runtime/components/aware/AFacepile.vue.d.ts +20 -0
  77. package/dist/runtime/components/aware/AInput.d.vue.ts +7 -0
  78. package/dist/runtime/components/aware/AInput.vue +44 -0
  79. package/dist/runtime/components/aware/AInput.vue.d.ts +7 -0
  80. package/dist/runtime/components/aware/ASelect.d.vue.ts +7 -0
  81. package/dist/runtime/components/aware/ASelect.vue +51 -0
  82. package/dist/runtime/components/aware/ASelect.vue.d.ts +7 -0
  83. package/dist/runtime/components/aware/ATextarea.d.vue.ts +7 -0
  84. package/dist/runtime/components/aware/ATextarea.vue +44 -0
  85. package/dist/runtime/components/aware/ATextarea.vue.d.ts +7 -0
  86. package/dist/runtime/components/aware/AUserList.d.vue.ts +17 -0
  87. package/dist/runtime/components/aware/AUserList.vue +72 -0
  88. package/dist/runtime/components/aware/AUserList.vue.d.ts +17 -0
  89. package/dist/runtime/components/renderers/ACalendarRenderer.d.vue.ts +8 -0
  90. package/dist/runtime/components/renderers/ACalendarRenderer.vue +154 -0
  91. package/dist/runtime/components/renderers/ACalendarRenderer.vue.d.ts +8 -0
  92. package/dist/runtime/components/renderers/AGalleryRenderer.d.vue.ts +8 -0
  93. package/dist/runtime/components/renderers/AGalleryRenderer.vue +88 -0
  94. package/dist/runtime/components/renderers/AGalleryRenderer.vue.d.ts +8 -0
  95. package/dist/runtime/components/renderers/AKanbanRenderer.d.vue.ts +8 -0
  96. package/dist/runtime/components/renderers/AKanbanRenderer.vue +179 -0
  97. package/dist/runtime/components/renderers/AKanbanRenderer.vue.d.ts +8 -0
  98. package/dist/runtime/components/renderers/AOutlineRenderer.d.vue.ts +8 -0
  99. package/dist/runtime/components/renderers/AOutlineRenderer.vue +180 -0
  100. package/dist/runtime/components/renderers/AOutlineRenderer.vue.d.ts +8 -0
  101. package/dist/runtime/components/renderers/ATableRenderer.d.vue.ts +8 -0
  102. package/dist/runtime/components/renderers/ATableRenderer.vue +191 -0
  103. package/dist/runtime/components/renderers/ATableRenderer.vue.d.ts +8 -0
  104. package/dist/runtime/composables/useAAField.d.ts +42 -0
  105. package/dist/runtime/composables/useAAField.js +62 -0
  106. package/dist/runtime/composables/useAbraLocale.d.ts +14 -0
  107. package/dist/runtime/composables/useAbraLocale.js +11 -0
  108. package/dist/runtime/composables/useAbracadabra.d.ts +11 -0
  109. package/dist/runtime/composables/useAbracadabra.js +3 -0
  110. package/dist/runtime/composables/useAbracadabraAuth.d.ts +23 -0
  111. package/dist/runtime/composables/useAbracadabraAuth.js +22 -0
  112. package/dist/runtime/composables/useAwareness.d.ts +22 -0
  113. package/dist/runtime/composables/useAwareness.js +48 -0
  114. package/dist/runtime/composables/useAwarenessPeers.d.ts +34 -0
  115. package/dist/runtime/composables/useAwarenessPeers.js +33 -0
  116. package/dist/runtime/composables/useBackgroundSync.d.ts +37 -0
  117. package/dist/runtime/composables/useBackgroundSync.js +73 -0
  118. package/dist/runtime/composables/useChat.d.ts +65 -0
  119. package/dist/runtime/composables/useChat.js +210 -0
  120. package/dist/runtime/composables/useChatUsers.d.ts +21 -0
  121. package/dist/runtime/composables/useChatUsers.js +39 -0
  122. package/dist/runtime/composables/useChildTree.d.ts +119 -0
  123. package/dist/runtime/composables/useChildTree.js +100 -0
  124. package/dist/runtime/composables/useCommandPalette.d.ts +58 -0
  125. package/dist/runtime/composables/useCommandPalette.js +94 -0
  126. package/dist/runtime/composables/useConnectionStatus.d.ts +17 -0
  127. package/dist/runtime/composables/useConnectionStatus.js +37 -0
  128. package/dist/runtime/composables/useDashboard.d.ts +3 -0
  129. package/dist/runtime/composables/useDashboard.js +23 -0
  130. package/dist/runtime/composables/useDocExport.d.ts +5 -0
  131. package/dist/runtime/composables/useDocExport.js +256 -0
  132. package/dist/runtime/composables/useDocImport.d.ts +10 -0
  133. package/dist/runtime/composables/useDocImport.js +227 -0
  134. package/dist/runtime/composables/useDocJump.d.ts +29 -0
  135. package/dist/runtime/composables/useDocJump.js +17 -0
  136. package/dist/runtime/composables/useDocumentPermissions.d.ts +20 -0
  137. package/dist/runtime/composables/useDocumentPermissions.js +33 -0
  138. package/dist/runtime/composables/useEditor.d.ts +45 -0
  139. package/dist/runtime/composables/useEditor.js +121 -0
  140. package/dist/runtime/composables/useEditorDragHandle.d.ts +26 -0
  141. package/dist/runtime/composables/useEditorDragHandle.js +219 -0
  142. package/dist/runtime/composables/useEditorMentions.d.ts +28 -0
  143. package/dist/runtime/composables/useEditorMentions.js +40 -0
  144. package/dist/runtime/composables/useEditorSuggestions.d.ts +18 -0
  145. package/dist/runtime/composables/useEditorSuggestions.js +45 -0
  146. package/dist/runtime/composables/useEditorToolbar.d.ts +22 -0
  147. package/dist/runtime/composables/useEditorToolbar.js +60 -0
  148. package/dist/runtime/composables/useFileBlobStore.d.ts +15 -0
  149. package/dist/runtime/composables/useFileBlobStore.js +22 -0
  150. package/dist/runtime/composables/useFileIndex.d.ts +20 -0
  151. package/dist/runtime/composables/useFileIndex.js +69 -0
  152. package/dist/runtime/composables/useFollowUser.d.ts +5 -0
  153. package/dist/runtime/composables/useFollowUser.js +40 -0
  154. package/dist/runtime/composables/useNotifications.d.ts +82 -0
  155. package/dist/runtime/composables/useNotifications.js +171 -0
  156. package/dist/runtime/composables/useOfflineUploadQueue.d.ts +90 -0
  157. package/dist/runtime/composables/useOfflineUploadQueue.js +33 -0
  158. package/dist/runtime/composables/usePasskeyAccounts.d.ts +32 -0
  159. package/dist/runtime/composables/usePasskeyAccounts.js +46 -0
  160. package/dist/runtime/composables/usePluginRegistry.d.ts +6 -0
  161. package/dist/runtime/composables/usePluginRegistry.js +3 -0
  162. package/dist/runtime/composables/useRendererBase.d.ts +186 -0
  163. package/dist/runtime/composables/useRendererBase.js +46 -0
  164. package/dist/runtime/composables/useSearchIndex.d.ts +20 -0
  165. package/dist/runtime/composables/useSearchIndex.js +104 -0
  166. package/dist/runtime/composables/useTrash.d.ts +50 -0
  167. package/dist/runtime/composables/useTrash.js +127 -0
  168. package/dist/runtime/composables/useVoice.d.ts +51 -0
  169. package/dist/runtime/composables/useVoice.js +220 -0
  170. package/dist/runtime/composables/useWindowManager.d.ts +122 -0
  171. package/dist/runtime/composables/useWindowManager.js +141 -0
  172. package/dist/runtime/composables/useYDoc.d.ts +142 -0
  173. package/dist/runtime/composables/useYDoc.js +172 -0
  174. package/dist/runtime/extensions/accordion.d.ts +3 -0
  175. package/dist/runtime/extensions/accordion.js +49 -0
  176. package/dist/runtime/extensions/badge.d.ts +2 -0
  177. package/dist/runtime/extensions/badge.js +39 -0
  178. package/dist/runtime/extensions/callout.d.ts +2 -0
  179. package/dist/runtime/extensions/callout.js +28 -0
  180. package/dist/runtime/extensions/card.d.ts +3 -0
  181. package/dist/runtime/extensions/card.js +53 -0
  182. package/dist/runtime/extensions/code-collapse.d.ts +2 -0
  183. package/dist/runtime/extensions/code-collapse.js +32 -0
  184. package/dist/runtime/extensions/code-group.d.ts +2 -0
  185. package/dist/runtime/extensions/code-group.js +17 -0
  186. package/dist/runtime/extensions/collapsible.d.ts +2 -0
  187. package/dist/runtime/extensions/collapsible.js +35 -0
  188. package/dist/runtime/extensions/document-header.d.ts +11 -0
  189. package/dist/runtime/extensions/document-header.js +82 -0
  190. package/dist/runtime/extensions/document-meta.d.ts +20 -0
  191. package/dist/runtime/extensions/document-meta.js +121 -0
  192. package/dist/runtime/extensions/document.d.ts +6 -0
  193. package/dist/runtime/extensions/document.js +6 -0
  194. package/dist/runtime/extensions/file-block.d.ts +15 -0
  195. package/dist/runtime/extensions/file-block.js +34 -0
  196. package/dist/runtime/extensions/file-drop.d.ts +6 -0
  197. package/dist/runtime/extensions/file-drop.js +65 -0
  198. package/dist/runtime/extensions/kbd.d.ts +2 -0
  199. package/dist/runtime/extensions/kbd.js +33 -0
  200. package/dist/runtime/extensions/prose-icon.d.ts +2 -0
  201. package/dist/runtime/extensions/prose-icon.js +33 -0
  202. package/dist/runtime/extensions/search-highlight.d.ts +10 -0
  203. package/dist/runtime/extensions/search-highlight.js +129 -0
  204. package/dist/runtime/extensions/steps.d.ts +2 -0
  205. package/dist/runtime/extensions/steps.js +32 -0
  206. package/dist/runtime/extensions/tabs.d.ts +3 -0
  207. package/dist/runtime/extensions/tabs.js +49 -0
  208. package/dist/runtime/extensions/views/AccordionItemView.d.vue.ts +4 -0
  209. package/dist/runtime/extensions/views/AccordionItemView.vue +41 -0
  210. package/dist/runtime/extensions/views/AccordionItemView.vue.d.ts +4 -0
  211. package/dist/runtime/extensions/views/AccordionView.d.vue.ts +4 -0
  212. package/dist/runtime/extensions/views/AccordionView.vue +22 -0
  213. package/dist/runtime/extensions/views/AccordionView.vue.d.ts +4 -0
  214. package/dist/runtime/extensions/views/BadgeView.d.vue.ts +4 -0
  215. package/dist/runtime/extensions/views/BadgeView.vue +23 -0
  216. package/dist/runtime/extensions/views/BadgeView.vue.d.ts +4 -0
  217. package/dist/runtime/extensions/views/CalloutView.d.vue.ts +4 -0
  218. package/dist/runtime/extensions/views/CalloutView.vue +43 -0
  219. package/dist/runtime/extensions/views/CalloutView.vue.d.ts +4 -0
  220. package/dist/runtime/extensions/views/CardGroupView.d.vue.ts +4 -0
  221. package/dist/runtime/extensions/views/CardGroupView.vue +22 -0
  222. package/dist/runtime/extensions/views/CardGroupView.vue.d.ts +4 -0
  223. package/dist/runtime/extensions/views/CardView.d.vue.ts +4 -0
  224. package/dist/runtime/extensions/views/CardView.vue +28 -0
  225. package/dist/runtime/extensions/views/CardView.vue.d.ts +4 -0
  226. package/dist/runtime/extensions/views/CodeCollapseView.d.vue.ts +4 -0
  227. package/dist/runtime/extensions/views/CodeCollapseView.vue +45 -0
  228. package/dist/runtime/extensions/views/CodeCollapseView.vue.d.ts +4 -0
  229. package/dist/runtime/extensions/views/CodeGroupView.d.vue.ts +4 -0
  230. package/dist/runtime/extensions/views/CodeGroupView.vue +53 -0
  231. package/dist/runtime/extensions/views/CodeGroupView.vue.d.ts +4 -0
  232. package/dist/runtime/extensions/views/CollapsibleView.d.vue.ts +4 -0
  233. package/dist/runtime/extensions/views/CollapsibleView.vue +42 -0
  234. package/dist/runtime/extensions/views/CollapsibleView.vue.d.ts +4 -0
  235. package/dist/runtime/extensions/views/FileNodeView.d.vue.ts +4 -0
  236. package/dist/runtime/extensions/views/FileNodeView.vue +140 -0
  237. package/dist/runtime/extensions/views/FileNodeView.vue.d.ts +4 -0
  238. package/dist/runtime/extensions/views/KbdView.d.vue.ts +4 -0
  239. package/dist/runtime/extensions/views/KbdView.vue +23 -0
  240. package/dist/runtime/extensions/views/KbdView.vue.d.ts +4 -0
  241. package/dist/runtime/extensions/views/ProseIconView.d.vue.ts +4 -0
  242. package/dist/runtime/extensions/views/ProseIconView.vue +23 -0
  243. package/dist/runtime/extensions/views/ProseIconView.vue.d.ts +4 -0
  244. package/dist/runtime/extensions/views/StepsView.d.vue.ts +4 -0
  245. package/dist/runtime/extensions/views/StepsView.vue +32 -0
  246. package/dist/runtime/extensions/views/StepsView.vue.d.ts +4 -0
  247. package/dist/runtime/extensions/views/TabsItemView.d.vue.ts +4 -0
  248. package/dist/runtime/extensions/views/TabsItemView.vue +22 -0
  249. package/dist/runtime/extensions/views/TabsItemView.vue.d.ts +4 -0
  250. package/dist/runtime/extensions/views/TabsView.d.vue.ts +4 -0
  251. package/dist/runtime/extensions/views/TabsView.vue +56 -0
  252. package/dist/runtime/extensions/views/TabsView.vue.d.ts +4 -0
  253. package/dist/runtime/locale.d.ts +134 -0
  254. package/dist/runtime/locale.js +119 -0
  255. package/dist/runtime/middleware/abracadabra-auth.d.ts +11 -0
  256. package/dist/runtime/middleware/abracadabra-auth.js +9 -0
  257. package/dist/runtime/plugin-abracadabra.client.d.ts +7 -0
  258. package/dist/runtime/plugin-abracadabra.client.js +898 -0
  259. package/dist/runtime/plugin-abracadabra.server.d.ts +2 -0
  260. package/dist/runtime/plugin-abracadabra.server.js +71 -0
  261. package/dist/runtime/plugin-registry.d.ts +34 -0
  262. package/dist/runtime/plugin-registry.js +83 -0
  263. package/dist/runtime/plugin-shared-globals.client.d.ts +2 -0
  264. package/dist/runtime/plugin-shared-globals.client.js +20 -0
  265. package/dist/runtime/plugins/core.plugin.d.ts +12 -0
  266. package/dist/runtime/plugins/core.plugin.js +179 -0
  267. package/dist/runtime/server/api/_abracadabra/render/[docId].get.d.ts +18 -0
  268. package/dist/runtime/server/api/_abracadabra/render/[docId].get.js +51 -0
  269. package/dist/runtime/server/api/_abracadabra/spaces.get.d.ts +11 -0
  270. package/dist/runtime/server/api/_abracadabra/spaces.get.js +16 -0
  271. package/dist/runtime/server/plugins/abracadabra-service.d.ts +2 -0
  272. package/dist/runtime/server/plugins/abracadabra-service.js +116 -0
  273. package/dist/runtime/server/runners/doc-tree-cache.d.ts +11 -0
  274. package/dist/runtime/server/runners/doc-tree-cache.js +65 -0
  275. package/dist/runtime/server/tsconfig.json +3 -0
  276. package/dist/runtime/server/utils/docCache.d.ts +25 -0
  277. package/dist/runtime/server/utils/docCache.js +131 -0
  278. package/dist/runtime/server/utils/serverRunner.d.ts +28 -0
  279. package/dist/runtime/server/utils/serverRunner.js +58 -0
  280. package/dist/runtime/types.d.ts +444 -0
  281. package/dist/runtime/types.js +93 -0
  282. package/dist/runtime/utils/VoiceClient.d.ts +94 -0
  283. package/dist/runtime/utils/VoiceClient.js +599 -0
  284. package/dist/runtime/utils/avatarStyle.d.ts +15 -0
  285. package/dist/runtime/utils/avatarStyle.js +20 -0
  286. package/dist/runtime/utils/colorPalettes.d.ts +13 -0
  287. package/dist/runtime/utils/colorPalettes.js +49 -0
  288. package/dist/runtime/utils/docTypes.d.ts +129 -0
  289. package/dist/runtime/utils/docTypes.js +116 -0
  290. package/dist/runtime/utils/markdownToYjs.d.ts +23 -0
  291. package/dist/runtime/utils/markdownToYjs.js +440 -0
  292. package/dist/runtime/utils/metaFieldDefinitions.d.ts +7 -0
  293. package/dist/runtime/utils/metaFieldDefinitions.js +182 -0
  294. package/dist/runtime/utils/voiceErrors.d.ts +33 -0
  295. package/dist/runtime/utils/voiceErrors.js +54 -0
  296. package/dist/runtime/utils/yjsConvert.d.ts +14 -0
  297. package/dist/runtime/utils/yjsConvert.js +331 -0
  298. package/dist/types.d.mts +13 -0
  299. package/package.json +100 -0
@@ -0,0 +1,541 @@
1
+ <script setup>
2
+ import { ref, computed } from "vue";
3
+ import { useChildTree } from "../composables/useChildTree";
4
+ import { useAbraLocale } from "../composables/useAbraLocale";
5
+ import { META_FIELD_DEFINITIONS } from "../utils/metaFieldDefinitions";
6
+ const props = defineProps({
7
+ nodeId: { type: [String, null], required: true },
8
+ nodeLabel: { type: String, required: false },
9
+ childProvider: { type: null, required: false },
10
+ docType: { type: String, required: false },
11
+ labels: { type: Object, required: false }
12
+ });
13
+ const emit = defineEmits(["close"]);
14
+ const open = computed({
15
+ get: () => !!props.nodeId,
16
+ set: (v) => {
17
+ if (!v) emit("close");
18
+ }
19
+ });
20
+ const locale = computed(() => useAbraLocale("nodePanel", props.labels));
21
+ const { doc: rootDoc, registry } = useAbracadabra();
22
+ const tree = computed(() => {
23
+ if (!props.nodeId) return null;
24
+ return useChildTree(rootDoc, props.nodeId);
25
+ });
26
+ const entry = computed(() => {
27
+ if (!props.nodeId) return null;
28
+ const treeMap = rootDoc.value?.getMap("doc-tree");
29
+ return treeMap?.get(props.nodeId) ?? null;
30
+ });
31
+ const meta = computed(() => entry.value?.meta ?? {});
32
+ const currentType = computed(() => entry.value?.type ?? "doc");
33
+ function patchMeta(patch) {
34
+ if (!props.nodeId || !rootDoc.value) return;
35
+ const treeMap = rootDoc.value.getMap("doc-tree");
36
+ const e = treeMap.get(props.nodeId);
37
+ if (e) {
38
+ treeMap.set(props.nodeId, {
39
+ ...e,
40
+ meta: { ...e.meta ?? {}, ...patch },
41
+ updatedAt: Date.now()
42
+ });
43
+ }
44
+ }
45
+ function patchType(type) {
46
+ if (!props.nodeId || !rootDoc.value) return;
47
+ const treeMap = rootDoc.value.getMap("doc-tree");
48
+ const e = treeMap.get(props.nodeId);
49
+ if (e) treeMap.set(props.nodeId, { ...e, type, updatedAt: Date.now() });
50
+ }
51
+ const activeTab = ref("editor");
52
+ const tabs = computed(() => {
53
+ const base = [
54
+ { key: "editor", label: locale.value.editorTab, icon: "i-lucide-file-text" },
55
+ { key: "properties", label: locale.value.propertiesTab, icon: "i-lucide-sliders-horizontal" }
56
+ ];
57
+ const pluginSlots2 = registry.getAllNodePanelSlots().filter((slot) => {
58
+ if (!props.nodeId || !tree.value) return false;
59
+ const e = tree.value.entries.value.find((en) => en.id === props.nodeId);
60
+ if (!e) return false;
61
+ return slot.when({
62
+ childId: props.nodeId,
63
+ childDoc: props.childProvider?.document ?? null,
64
+ parentDocId: props.nodeId,
65
+ parentType: props.docType,
66
+ meta: meta.value,
67
+ tree: tree.value
68
+ });
69
+ });
70
+ return [...base, ...pluginSlots2.map((s) => ({ key: s.id, label: s.label, icon: s.icon }))];
71
+ });
72
+ const pluginSlots = computed(() => {
73
+ return registry.getAllNodePanelSlots().filter((slot) => {
74
+ if (!props.nodeId || !tree.value) return false;
75
+ const e = tree.value.entries.value.find((en) => en.id === props.nodeId);
76
+ if (!e) return false;
77
+ return slot.when({
78
+ childId: props.nodeId,
79
+ childDoc: props.childProvider?.document ?? null,
80
+ parentDocId: props.nodeId,
81
+ parentType: props.docType,
82
+ meta: meta.value,
83
+ tree: tree.value
84
+ });
85
+ });
86
+ });
87
+ const tagInput = ref("");
88
+ const tags = computed(() => meta.value.tags ?? []);
89
+ function addTag() {
90
+ const t = tagInput.value.trim();
91
+ if (!t || tags.value.includes(t)) {
92
+ tagInput.value = "";
93
+ return;
94
+ }
95
+ patchMeta({ tags: [...tags.value, t] });
96
+ tagInput.value = "";
97
+ }
98
+ function removeTag(tag) {
99
+ patchMeta({ tags: tags.value.filter((t) => t !== tag) });
100
+ }
101
+ const customFields = computed(() => meta.value._metaFields ?? []);
102
+ function addCustomField(def) {
103
+ const attrs = def.buildAttrs();
104
+ const field = {
105
+ id: `field_${Date.now()}`,
106
+ type: String(attrs.fieldType ?? def.kind),
107
+ label: String(attrs.fieldLabel ?? def.label),
108
+ key: attrs.metaKey ? String(attrs.metaKey) : void 0,
109
+ latKey: attrs.latKey ? String(attrs.latKey) : void 0,
110
+ lngKey: attrs.lngKey ? String(attrs.lngKey) : void 0,
111
+ startKey: attrs.startKey ? String(attrs.startKey) : void 0,
112
+ endKey: attrs.endKey ? String(attrs.endKey) : void 0,
113
+ allDayKey: attrs.allDayKey ? String(attrs.allDayKey) : void 0,
114
+ min: typeof attrs.sliderMin === "number" ? attrs.sliderMin : void 0,
115
+ max: typeof attrs.sliderMax === "number" ? attrs.sliderMax : void 0,
116
+ options: attrs.options ? JSON.parse(String(attrs.options)) : void 0
117
+ };
118
+ patchMeta({ _metaFields: [...customFields.value, field] });
119
+ }
120
+ function removeCustomField(fieldId) {
121
+ patchMeta({ _metaFields: customFields.value.filter((f) => f.id !== fieldId) });
122
+ }
123
+ function getCustomFieldValue(field) {
124
+ if (field.key) return meta.value[field.key];
125
+ return void 0;
126
+ }
127
+ function setCustomFieldValue(field, value) {
128
+ if (!field.key) return;
129
+ patchMeta({ [field.key]: value });
130
+ }
131
+ const statusOptions = [
132
+ { label: "None", value: "" },
133
+ { label: "Todo", value: "todo" },
134
+ { label: "In progress", value: "in-progress" },
135
+ { label: "Done", value: "done" },
136
+ { label: "Archived", value: "archived" }
137
+ ];
138
+ const priorityOptions = [
139
+ { label: "None", value: 0 },
140
+ { label: "1 \u2014 Low", value: 1 },
141
+ { label: "2", value: 2 },
142
+ { label: "3 \u2014 Medium", value: 3 },
143
+ { label: "4", value: 4 },
144
+ { label: "5 \u2014 High", value: 5 }
145
+ ];
146
+ const addFieldMenuItems = computed(
147
+ () => META_FIELD_DEFINITIONS.map((def) => ({
148
+ label: def.label,
149
+ icon: def.icon,
150
+ onSelect: () => addCustomField(def)
151
+ }))
152
+ );
153
+ </script>
154
+
155
+ <template>
156
+ <USlideover
157
+ v-model:open="open"
158
+ side="right"
159
+ :title="nodeLabel || 'Document'"
160
+ :ui="{ width: 'max-w-xl' }"
161
+ @update:open="(v) => !v && emit('close')"
162
+ >
163
+ <template #header>
164
+ <div class="flex items-center gap-2 min-w-0">
165
+ <UIcon
166
+ :name="meta.icon ?? 'i-lucide-file-text'"
167
+ class="size-4 shrink-0"
168
+ :style="meta.color ? `color: ${meta.color}` : ''"
169
+ :class="meta.color ? '' : 'text-muted'"
170
+ />
171
+ <span class="font-medium truncate">{{ nodeLabel || "Document" }}</span>
172
+ </div>
173
+ </template>
174
+
175
+ <template #body>
176
+ <!-- Tabs -->
177
+ <UTabs
178
+ v-model="activeTab"
179
+ :items="tabs"
180
+ variant="link"
181
+ class="mb-4"
182
+ />
183
+
184
+ <!-- Editor tab -->
185
+ <div v-show="activeTab === 'editor'" class="h-[60vh]">
186
+ <AEditor
187
+ v-if="nodeId"
188
+ :doc-id="nodeId"
189
+ :child-provider="childProvider"
190
+ class="h-full overflow-auto"
191
+ />
192
+ </div>
193
+
194
+ <!-- Properties tab -->
195
+ <div v-show="activeTab === 'properties'" class="space-y-4">
196
+
197
+ <!-- Document type -->
198
+ <div class="space-y-1">
199
+ <label class="text-xs font-medium text-muted">{{ locale.docType }}</label>
200
+ <ADocTypeSelect
201
+ :model-value="currentType"
202
+ @update:model-value="patchType"
203
+ />
204
+ </div>
205
+
206
+ <!-- Icon + Color (row) -->
207
+ <div class="grid grid-cols-2 gap-3">
208
+ <div class="space-y-1">
209
+ <label class="text-xs font-medium text-muted">{{ locale.icon }}</label>
210
+ <AIconPicker
211
+ :model-value="meta.icon"
212
+ @update:model-value="patchMeta({ icon: $event })"
213
+ />
214
+ </div>
215
+ <div class="space-y-1">
216
+ <label class="text-xs font-medium text-muted">{{ locale.color }}</label>
217
+ <AColorPicker
218
+ :model-value="meta.color"
219
+ @update:model-value="patchMeta({ color: $event })"
220
+ />
221
+ </div>
222
+ </div>
223
+
224
+ <!-- Status + Priority (row) -->
225
+ <div class="grid grid-cols-2 gap-3">
226
+ <div class="space-y-1">
227
+ <label class="text-xs font-medium text-muted">{{ locale.status }}</label>
228
+ <USelectMenu
229
+ :model-value="meta.status ?? ''"
230
+ :items="statusOptions"
231
+ value-key="value"
232
+ placeholder="None"
233
+ size="sm"
234
+ @update:model-value="patchMeta({ status: $event || void 0 })"
235
+ />
236
+ </div>
237
+ <div class="space-y-1">
238
+ <label class="text-xs font-medium text-muted">{{ locale.priority }}</label>
239
+ <USelectMenu
240
+ :model-value="meta.priority ?? 0"
241
+ :items="priorityOptions"
242
+ value-key="value"
243
+ size="sm"
244
+ @update:model-value="patchMeta({ priority: $event || void 0 })"
245
+ />
246
+ </div>
247
+ </div>
248
+
249
+ <!-- Rating -->
250
+ <div class="space-y-1">
251
+ <label class="text-xs font-medium text-muted">{{ locale.rating }}</label>
252
+ <div class="flex items-center gap-1">
253
+ <button
254
+ v-for="n in 5"
255
+ :key="n"
256
+ type="button"
257
+ class="transition-colors focus:outline-none"
258
+ @click="patchMeta({ rating: meta.rating === n ? void 0 : n })"
259
+ >
260
+ <UIcon
261
+ name="i-lucide-star"
262
+ class="size-5"
263
+ :class="(meta.rating ?? 0) >= n ? 'text-warning' : 'text-muted'"
264
+ />
265
+ </button>
266
+ <button
267
+ v-if="meta.rating"
268
+ type="button"
269
+ class="ml-1 text-xs text-muted hover:text-default"
270
+ @click="patchMeta({ rating: void 0 })"
271
+ >
272
+ <UIcon name="i-lucide-x" class="size-3" />
273
+ </button>
274
+ </div>
275
+ </div>
276
+
277
+ <!-- URL -->
278
+ <div class="space-y-1">
279
+ <label class="text-xs font-medium text-muted">{{ locale.url }}</label>
280
+ <UInput
281
+ type="url"
282
+ :model-value="meta.url ?? ''"
283
+ placeholder="https://…"
284
+ size="sm"
285
+ @update:model-value="patchMeta({ url: $event || void 0 })"
286
+ />
287
+ </div>
288
+
289
+ <!-- Dates -->
290
+ <div class="space-y-1">
291
+ <label class="text-xs font-medium text-muted">{{ locale.dates }}</label>
292
+ <div class="grid grid-cols-2 gap-2">
293
+ <UInput
294
+ type="date"
295
+ :model-value="meta.dateStart ?? ''"
296
+ size="sm"
297
+ @update:model-value="patchMeta({ dateStart: $event || void 0 })"
298
+ />
299
+ <UInput
300
+ type="date"
301
+ :model-value="meta.dateEnd ?? ''"
302
+ size="sm"
303
+ @update:model-value="patchMeta({ dateEnd: $event || void 0 })"
304
+ />
305
+ </div>
306
+ </div>
307
+
308
+ <!-- Tags -->
309
+ <div class="space-y-1">
310
+ <label class="text-xs font-medium text-muted">Tags</label>
311
+ <div class="flex flex-wrap gap-1 mb-1">
312
+ <UBadge
313
+ v-for="tag in tags"
314
+ :key="tag"
315
+ variant="soft"
316
+ class="cursor-pointer"
317
+ @click="removeTag(tag)"
318
+ >
319
+ {{ tag }}
320
+ <UIcon name="i-lucide-x" class="size-3 ml-1" />
321
+ </UBadge>
322
+ </div>
323
+ <UInput
324
+ v-model="tagInput"
325
+ placeholder="Add tag…"
326
+ size="sm"
327
+ @keydown.enter.prevent="addTag"
328
+ @keydown.comma.prevent="addTag"
329
+ />
330
+ </div>
331
+
332
+ <!-- Cover image -->
333
+ <div v-if="meta.coverUploadId || meta.coverDocId" class="space-y-1">
334
+ <label class="text-xs font-medium text-muted">{{ locale.cover }}</label>
335
+ <div class="flex items-center gap-2 text-xs text-muted">
336
+ <UIcon name="i-lucide-image" class="size-4 shrink-0" />
337
+ <span class="truncate">{{ meta.coverUploadId ?? meta.coverDocId }}</span>
338
+ <UButton
339
+ icon="i-lucide-x"
340
+ size="xs"
341
+ variant="ghost"
342
+ color="neutral"
343
+ @click="patchMeta({ coverUploadId: void 0, coverDocId: void 0, coverMimeType: void 0 })"
344
+ />
345
+ </div>
346
+ </div>
347
+
348
+ <!-- Custom fields -->
349
+ <div class="space-y-2">
350
+ <div class="flex items-center justify-between">
351
+ <label class="text-xs font-medium text-muted">{{ locale.customFields }}</label>
352
+ <UDropdownMenu :items="addFieldMenuItems">
353
+ <UButton
354
+ :label="locale.addField"
355
+ icon="i-lucide-plus"
356
+ size="xs"
357
+ variant="ghost"
358
+ color="neutral"
359
+ />
360
+ </UDropdownMenu>
361
+ </div>
362
+
363
+ <div
364
+ v-for="field in customFields"
365
+ :key="field.id"
366
+ class="space-y-1"
367
+ >
368
+ <div class="flex items-center justify-between">
369
+ <label class="text-xs font-medium text-muted">{{ field.label || field.type }}</label>
370
+ <UButton
371
+ icon="i-lucide-trash-2"
372
+ size="xs"
373
+ variant="ghost"
374
+ color="neutral"
375
+ class="opacity-40 hover:opacity-100"
376
+ @click="removeCustomField(field.id)"
377
+ />
378
+ </div>
379
+
380
+ <!-- Toggle -->
381
+ <template v-if="field.type === 'toggle'">
382
+ <UToggle
383
+ :model-value="!!getCustomFieldValue(field)"
384
+ @update:model-value="setCustomFieldValue(field, $event)"
385
+ />
386
+ </template>
387
+
388
+ <!-- Number -->
389
+ <template v-else-if="field.type === 'number'">
390
+ <UInput
391
+ type="number"
392
+ :model-value="String(getCustomFieldValue(field) ?? '')"
393
+ size="sm"
394
+ @update:model-value="setCustomFieldValue(field, $event ? Number($event) : void 0)"
395
+ />
396
+ </template>
397
+
398
+ <!-- Slider / Progress -->
399
+ <template v-else-if="field.type === 'slider'">
400
+ <div class="flex items-center gap-2">
401
+ <USlider
402
+ :model-value="Number(getCustomFieldValue(field) ?? field.min ?? 0)"
403
+ :min="field.min ?? 0"
404
+ :max="field.max ?? 100"
405
+ size="sm"
406
+ class="flex-1"
407
+ @update:model-value="setCustomFieldValue(field, $event)"
408
+ />
409
+ <span class="text-xs text-muted w-8 text-right">{{ getCustomFieldValue(field) ?? field.min ?? 0 }}</span>
410
+ </div>
411
+ </template>
412
+
413
+ <!-- Rating -->
414
+ <template v-else-if="field.type === 'rating'">
415
+ <div class="flex items-center gap-1">
416
+ <button
417
+ v-for="n in field.max ?? 5"
418
+ :key="n"
419
+ type="button"
420
+ class="focus:outline-none"
421
+ @click="setCustomFieldValue(field, getCustomFieldValue(field) === n ? void 0 : n)"
422
+ >
423
+ <UIcon
424
+ name="i-lucide-star"
425
+ class="size-4"
426
+ :class="Number(getCustomFieldValue(field) ?? 0) >= n ? 'text-warning' : 'text-muted'"
427
+ />
428
+ </button>
429
+ </div>
430
+ </template>
431
+
432
+ <!-- Date / Datetime / Time (single) -->
433
+ <template v-else-if="['date', 'datetime', 'time'].includes(field.type)">
434
+ <UInput
435
+ :type="field.type === 'datetime' ? 'datetime-local' : field.type"
436
+ :model-value="String(getCustomFieldValue(field) ?? '')"
437
+ size="sm"
438
+ @update:model-value="setCustomFieldValue(field, $event || void 0)"
439
+ />
440
+ </template>
441
+
442
+ <!-- Date range / Time range / Datetime range -->
443
+ <template v-else-if="['daterange', 'timerange', 'datetimerange'].includes(field.type)">
444
+ <div class="grid grid-cols-2 gap-2">
445
+ <UInput
446
+ :type="field.type === 'datetimerange' ? 'datetime-local' : field.type === 'timerange' ? 'time' : 'date'"
447
+ :model-value="field.startKey ? String(meta[field.startKey] ?? '') : ''"
448
+ size="sm"
449
+ @update:model-value="field.startKey && patchMeta({ [field.startKey]: $event || void 0 })"
450
+ />
451
+ <UInput
452
+ :type="field.type === 'datetimerange' ? 'datetime-local' : field.type === 'timerange' ? 'time' : 'date'"
453
+ :model-value="field.endKey ? String(meta[field.endKey] ?? '') : ''"
454
+ size="sm"
455
+ @update:model-value="field.endKey && patchMeta({ [field.endKey]: $event || void 0 })"
456
+ />
457
+ </div>
458
+ </template>
459
+
460
+ <!-- Textarea -->
461
+ <template v-else-if="field.type === 'textarea'">
462
+ <UTextarea
463
+ :model-value="String(getCustomFieldValue(field) ?? '')"
464
+ :rows="3"
465
+ size="sm"
466
+ @update:model-value="setCustomFieldValue(field, $event || void 0)"
467
+ />
468
+ </template>
469
+
470
+ <!-- URL -->
471
+ <template v-else-if="field.type === 'url'">
472
+ <UInput
473
+ type="url"
474
+ :model-value="String(getCustomFieldValue(field) ?? '')"
475
+ placeholder="https://…"
476
+ size="sm"
477
+ @update:model-value="setCustomFieldValue(field, $event || void 0)"
478
+ />
479
+ </template>
480
+
481
+ <!-- Tags -->
482
+ <template v-else-if="field.type === 'tags'">
483
+ <div class="flex flex-wrap gap-1">
484
+ <UBadge
485
+ v-for="t in Array.isArray(getCustomFieldValue(field)) ? getCustomFieldValue(field) : []"
486
+ :key="t"
487
+ variant="soft"
488
+ class="cursor-pointer"
489
+ @click="setCustomFieldValue(field, getCustomFieldValue(field).filter((x) => x !== t))"
490
+ >
491
+ {{ t }}<UIcon name="i-lucide-x" class="size-3 ml-1" />
492
+ </UBadge>
493
+ </div>
494
+ </template>
495
+
496
+ <!-- Icon -->
497
+ <template v-else-if="field.type === 'icon'">
498
+ <AIconPicker
499
+ :model-value="String(getCustomFieldValue(field) ?? '')"
500
+ @update:model-value="setCustomFieldValue(field, $event)"
501
+ />
502
+ </template>
503
+
504
+ <!-- Color Preset / Color Picker -->
505
+ <template v-else-if="['colorPreset', 'colorPicker'].includes(field.type)">
506
+ <AColorPicker
507
+ :model-value="String(getCustomFieldValue(field) ?? '')"
508
+ @update:model-value="setCustomFieldValue(field, $event)"
509
+ />
510
+ </template>
511
+
512
+ <!-- Fallback: text input -->
513
+ <template v-else>
514
+ <UInput
515
+ :model-value="String(getCustomFieldValue(field) ?? '')"
516
+ size="sm"
517
+ @update:model-value="setCustomFieldValue(field, $event || void 0)"
518
+ />
519
+ </template>
520
+ </div>
521
+ </div>
522
+ </div>
523
+
524
+ <!-- Plugin slots -->
525
+ <template v-for="slot in pluginSlots" :key="slot.id">
526
+ <div v-show="activeTab === slot.id">
527
+ <component
528
+ :is="slot.component"
529
+ v-if="nodeId"
530
+ :child-id="nodeId"
531
+ :child-doc="childProvider?.document ?? null"
532
+ :parent-doc-id="nodeId"
533
+ :parent-type="docType"
534
+ :meta="meta"
535
+ :tree="tree"
536
+ />
537
+ </div>
538
+ </template>
539
+ </template>
540
+ </USlideover>
541
+ </template>
@@ -0,0 +1,15 @@
1
+ import type { AbracadabraLocale } from '../locale.js';
2
+ type __VLS_Props = {
3
+ nodeId: string | null;
4
+ nodeLabel?: string;
5
+ childProvider?: any;
6
+ docType?: string;
7
+ labels?: Partial<AbracadabraLocale['nodePanel']>;
8
+ };
9
+ declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
10
+ close: () => any;
11
+ }, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
12
+ onClose?: (() => any) | undefined;
13
+ }>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
14
+ declare const _default: typeof __VLS_export;
15
+ export default _default;
@@ -0,0 +1,7 @@
1
+ import type { AbracadabraLocale } from '../locale.js';
2
+ type __VLS_Props = {
3
+ labels?: Partial<AbracadabraLocale['notifications']>;
4
+ };
5
+ declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
6
+ declare const _default: typeof __VLS_export;
7
+ export default _default;
@@ -0,0 +1,75 @@
1
+ <script setup>
2
+ import { useAbraLocale } from "../composables/useAbraLocale";
3
+ const notifProps = defineProps({
4
+ labels: { type: Object, required: false }
5
+ });
6
+ const locale = useAbraLocale("notifications", notifProps.labels);
7
+ const { notifications, unreadCount, markRead, markAllRead, fetchNotifications } = useNotifications();
8
+ const isOpen = ref(false);
9
+ onMounted(() => {
10
+ fetchNotifications();
11
+ });
12
+ function openAndMarkFetched() {
13
+ isOpen.value = true;
14
+ fetchNotifications({ limit: 50 });
15
+ }
16
+ </script>
17
+
18
+ <template>
19
+ <ClientOnly>
20
+ <div class="relative">
21
+ <UButton
22
+ icon="i-lucide-bell"
23
+ variant="ghost"
24
+ color="neutral"
25
+ :aria-label="`Notifications${unreadCount > 0 ? ` (${unreadCount} unread)` : ''}`"
26
+ @click="openAndMarkFetched"
27
+ >
28
+ <template v-if="unreadCount > 0" #trailing>
29
+ <UChip :text="unreadCount > 9 ? '9+' : String(unreadCount)" color="error" size="xs" />
30
+ </template>
31
+ </UButton>
32
+
33
+ <USlideover v-model:open="isOpen" :title="locale.title" side="right" :ui="{ width: 'max-w-sm' }">
34
+ <template #header>
35
+ <div class="flex items-center justify-between w-full">
36
+ <span class="font-semibold">{{ locale.title }}</span>
37
+ <UButton
38
+ v-if="unreadCount > 0"
39
+ size="xs"
40
+ variant="ghost"
41
+ @click="markAllRead"
42
+ >
43
+ {{ locale.markAllRead }}
44
+ </UButton>
45
+ </div>
46
+ </template>
47
+
48
+ <template #body>
49
+ <div class="space-y-1">
50
+ <div
51
+ v-for="n in notifications.slice(0, 50)"
52
+ :key="n.id"
53
+ :class="[
54
+ 'flex items-start gap-3 p-3 rounded-lg cursor-pointer transition-colors',
55
+ n.read ? 'opacity-60' : 'bg-elevated'
56
+ ]"
57
+ @click="markRead(n.id)"
58
+ >
59
+ <UIcon :name="n.icon ?? 'i-lucide-bell'" class="size-4 shrink-0 mt-0.5 text-muted" />
60
+ <div class="flex-1 min-w-0">
61
+ <div class="text-sm font-medium truncate">{{ n.title }}</div>
62
+ <div class="text-xs text-muted line-clamp-2">{{ n.body }}</div>
63
+ </div>
64
+ <UChip v-if="!n.read" color="primary" size="xs" class="shrink-0 mt-1" />
65
+ </div>
66
+
67
+ <div v-if="!notifications.length" class="text-center py-12 text-muted text-sm">
68
+ {{ locale.empty }}
69
+ </div>
70
+ </div>
71
+ </template>
72
+ </USlideover>
73
+ </div>
74
+ </ClientOnly>
75
+ </template>
@@ -0,0 +1,7 @@
1
+ import type { AbracadabraLocale } from '../locale.js';
2
+ type __VLS_Props = {
3
+ labels?: Partial<AbracadabraLocale['notifications']>;
4
+ };
5
+ declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
6
+ declare const _default: typeof __VLS_export;
7
+ export default _default;
@@ -0,0 +1,21 @@
1
+ import type { AbracadabraLocale } from '../locale.js';
2
+ type __VLS_Props = {
3
+ role: string;
4
+ requires: string | string[];
5
+ labels?: Partial<AbracadabraLocale['permissionGuard']>;
6
+ };
7
+ declare var __VLS_1: {}, __VLS_3: {};
8
+ type __VLS_Slots = {} & {
9
+ default?: (props: typeof __VLS_1) => any;
10
+ } & {
11
+ fallback?: (props: typeof __VLS_3) => any;
12
+ };
13
+ declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
14
+ declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
15
+ declare const _default: typeof __VLS_export;
16
+ export default _default;
17
+ type __VLS_WithSlots<T, S> = T & {
18
+ new (): {
19
+ $slots: S;
20
+ };
21
+ };