alinea 2.0.0-preview.11 → 2.0.0-preview.13

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 (268) hide show
  1. package/dist/.init/content/pages/welcome.json +1 -1
  2. package/dist/.mcp/later/dev.json +1 -1
  3. package/dist/.mcp/online/dev.json +1 -1
  4. package/dist/adapter/next/cms.js +16 -8
  5. package/dist/adapter/next/dashboardUrl.d.ts +6 -0
  6. package/dist/adapter/next/dashboardUrl.js +13 -0
  7. package/dist/adapter/next/syncCheck.d.ts +15 -2
  8. package/dist/adapter/next/syncCheck.js +26 -9
  9. package/dist/backend/Handler.js +5 -1
  10. package/dist/backend/api/BlobStore.d.ts +21 -0
  11. package/dist/backend/api/BlobStore.js +63 -0
  12. package/dist/backend/api/CreateBackend.js +10 -8
  13. package/dist/backend/api/DatabaseApi.d.ts +4 -1
  14. package/dist/backend/api/DatabaseApi.js +88 -4
  15. package/dist/backend/api/GithubApi.js +47 -24
  16. package/dist/backend/api/database.js +6 -6
  17. package/dist/bundled.d.ts +687 -248
  18. package/dist/chunks/{bun-sqlite-5SHXN3AT.js → bun-sqlite-RI6BYU5S.js} +3 -3
  19. package/dist/chunks/{chunk-YCQR5GRT.js → chunk-3QFSGTGF.js} +2 -3
  20. package/dist/chunks/{chunk-QJGGYF6E.js → chunk-4ZA6KZHS.js} +5 -5
  21. package/dist/chunks/{chunk-ASYKC6IE.js → chunk-5H4D5JQL.js} +1 -1
  22. package/dist/chunks/{chunk-ETWOY4AL.js → chunk-A2I6MCCS.js} +1 -1
  23. package/dist/chunks/{chunk-W5AXN7GH.js → chunk-CYVOGRSD.js} +1 -2
  24. package/dist/chunks/{chunk-TIJTT5ZI.js → chunk-G43W7AME.js} +1 -0
  25. package/dist/chunks/{chunk-RE523BQ7.js → chunk-HOETF6HN.js} +5829 -5830
  26. package/dist/chunks/{chunk-AIU6CMVT.js → chunk-PTYZMV5G.js} +1 -1
  27. package/dist/chunks/{chunk-JOF663EG.js → chunk-QHHMKJUO.js} +1 -1
  28. package/dist/chunks/{chunk-66YZ47TY.js → chunk-RAR44T5O.js} +1 -1
  29. package/dist/chunks/{chunk-QSN6RH6X.js → chunk-VA6NC3MI.js} +1 -1
  30. package/dist/chunks/{node-sqlite-XVNTNMCY.js → node-sqlite-C7VJ2NSN.js} +3 -3
  31. package/dist/cli/Mcp.js +1 -1
  32. package/dist/cli/Serve.js +1 -1
  33. package/dist/cli/bin.js +2 -3
  34. package/dist/cli/generate/GenerateDashboard.js +17 -5
  35. package/dist/cli/serve/mcp/DevMcp.js +1 -1
  36. package/dist/cli/serve/mcp/McpTools.js +29 -1
  37. package/dist/cli/static/dashboard/entry.js +2 -1
  38. package/dist/cloud/CloudRemote.js +1 -1
  39. package/dist/components/Alert.js +3 -3
  40. package/dist/components/AppShell.js +2 -2
  41. package/dist/components/Badge.d.ts +3 -1
  42. package/dist/components/Badge.js +5 -3
  43. package/dist/components/Breadcrumbs.js +6 -6
  44. package/dist/components/Button.d.ts +6 -1
  45. package/dist/components/Button.js +14 -5
  46. package/dist/components/Calendar.js +20 -20
  47. package/dist/components/Checkbox.js +9 -9
  48. package/dist/components/CheckboxGroup.js +4 -4
  49. package/dist/components/Collapsible.js +3 -3
  50. package/dist/components/ColorSwatch.js +2 -2
  51. package/dist/components/ColorSwatchPicker.js +2 -2
  52. package/dist/components/ComboBox.js +7 -7
  53. package/dist/components/Command.js +10 -9
  54. package/dist/components/ContentCard.d.ts +3 -1
  55. package/dist/components/ContentCard.js +39 -17
  56. package/dist/components/ContentGrid.js +15 -15
  57. package/dist/components/DataList.js +2 -2
  58. package/dist/components/DateField.js +2 -2
  59. package/dist/components/DatePicker.js +2 -2
  60. package/dist/components/DateRangePicker.js +2 -2
  61. package/dist/components/Dialog.js +6 -6
  62. package/dist/components/DropZone.js +4 -4
  63. package/dist/components/DropdownMenu.js +10 -10
  64. package/dist/components/Empty.js +4 -4
  65. package/dist/components/Field.js +8 -8
  66. package/dist/components/List.js +23 -23
  67. package/dist/components/MediaPreview.js +5 -5
  68. package/dist/components/MultipleSelect.js +20 -20
  69. package/dist/components/NavRail.js +4 -4
  70. package/dist/components/NumberField.js +5 -5
  71. package/dist/components/Page.js +5 -5
  72. package/dist/components/Popover.js +2 -2
  73. package/dist/components/PreviewFrame.js +5 -5
  74. package/dist/components/RadioGroup.js +6 -6
  75. package/dist/components/Resizable.js +5 -5
  76. package/dist/components/SearchField.d.ts +6 -1
  77. package/dist/components/SearchField.js +7 -5
  78. package/dist/components/Select.js +14 -14
  79. package/dist/components/Sheet.d.ts +50 -0
  80. package/dist/components/Sheet.js +202 -0
  81. package/dist/components/Sidebar.js +4 -4
  82. package/dist/components/SortableList.d.ts +34 -30
  83. package/dist/components/SortableList.js +162 -265
  84. package/dist/components/Spinner.js +1 -1
  85. package/dist/components/Surface.js +2 -2
  86. package/dist/components/Switch.js +7 -7
  87. package/dist/components/Table.d.ts +3 -1
  88. package/dist/components/Table.js +53 -42
  89. package/dist/components/Tabs.js +5 -5
  90. package/dist/components/TagGroup.js +9 -9
  91. package/dist/components/TextField.js +10 -10
  92. package/dist/components/TimeField.js +8 -8
  93. package/dist/components/Timestamp.js +1 -1
  94. package/dist/components/ToggleGroup.js +2 -2
  95. package/dist/components/Toolbar.js +4 -4
  96. package/dist/components/Tooltip.js +5 -5
  97. package/dist/components/Tree.js +29 -29
  98. package/dist/components/internal/DateControl.js +10 -10
  99. package/dist/components/internal/ListBoxOption.js +13 -13
  100. package/dist/components/internal/Locale.js +2 -2
  101. package/dist/components/internal/PopoverSurface.js +2 -2
  102. package/dist/components/internal/SelectionCheckbox.js +6 -6
  103. package/dist/components/internal/Slot.js +1 -1
  104. package/dist/components/internal/ToggleButton.js +3 -3
  105. package/dist/components/internal/Trigger.js +2 -2
  106. package/dist/components/internal/sortableDrag.d.ts +19 -0
  107. package/dist/components/internal/sortableDrag.js +175 -0
  108. package/dist/components/internal/useDragDrop.js +2 -2
  109. package/dist/components.d.ts +1 -0
  110. package/dist/components.js +1 -0
  111. package/dist/core/Config.d.ts +6 -1
  112. package/dist/core/Document.d.ts +9 -1
  113. package/dist/core/Document.js +31 -6
  114. package/dist/core/Overview.d.ts +2 -4
  115. package/dist/core/TextDoc.d.ts +4 -0
  116. package/dist/core/Validation.d.ts +0 -1
  117. package/dist/core/Validation.js +0 -6
  118. package/dist/core/field/RichTextField.js +23 -4
  119. package/dist/core/media/MediaTypes.js +1 -1
  120. package/dist/core/source/GithubSource.d.ts +4 -0
  121. package/dist/core/source/GithubSource.js +127 -25
  122. package/dist/core/source/GithubUsage.d.ts +21 -0
  123. package/dist/core/source/GithubUsage.js +47 -0
  124. package/dist/dashboard/App.d.ts +2 -2
  125. package/dist/dashboard/App.js +5 -3
  126. package/dist/dashboard/ViewKeys.d.ts +1 -0
  127. package/dist/dashboard/ViewKeys.js +1 -0
  128. package/dist/dashboard/app/ActivityStatus.js +11 -11
  129. package/dist/dashboard/app/AuthView.js +5 -5
  130. package/dist/dashboard/app/BlockSheet.d.ts +50 -0
  131. package/dist/dashboard/app/BlockSheet.js +207 -0
  132. package/dist/dashboard/app/BlockSheetStoryFrame.d.ts +6 -0
  133. package/dist/dashboard/app/BlockSheetStoryFrame.js +29 -0
  134. package/dist/dashboard/app/CompactField.js +15 -15
  135. package/dist/dashboard/app/CroppedImage.js +2 -2
  136. package/dist/dashboard/app/DashboardErrorBoundary.js +3 -3
  137. package/dist/dashboard/app/DashboardLayout.js +3 -1
  138. package/dist/dashboard/app/EntryHeader.js +32 -33
  139. package/dist/dashboard/app/EntryReferences.js +5 -5
  140. package/dist/dashboard/app/EntrySidebar.js +8 -8
  141. package/dist/dashboard/app/EntrySidebarPreview.js +4 -4
  142. package/dist/dashboard/app/EntryStatusIcon.d.ts +23 -0
  143. package/dist/dashboard/app/EntryStatusIcon.js +58 -0
  144. package/dist/dashboard/app/EntryValidationModal.d.ts +6 -5
  145. package/dist/dashboard/app/EntryValidationModal.js +18 -18
  146. package/dist/dashboard/app/Explorer.d.ts +3 -1
  147. package/dist/dashboard/app/Explorer.js +51 -47
  148. package/dist/dashboard/app/ExplorerBatchActions.d.ts +3 -1
  149. package/dist/dashboard/app/ExplorerBatchActions.js +68 -43
  150. package/dist/dashboard/app/ExplorerCards.js +7 -1
  151. package/dist/dashboard/app/ExplorerControls.js +6 -6
  152. package/dist/dashboard/app/ExplorerList.js +5 -5
  153. package/dist/dashboard/app/ExplorerModal.js +1 -1
  154. package/dist/dashboard/app/ExplorerTable.js +14 -11
  155. package/dist/dashboard/app/ImageEditor.js +25 -25
  156. package/dist/dashboard/app/ImagePicker.js +3 -13
  157. package/dist/dashboard/app/LinkPicker.js +29 -27
  158. package/dist/dashboard/app/LocaleMenu.js +7 -7
  159. package/dist/dashboard/app/MediaPreviewCell.js +2 -2
  160. package/dist/dashboard/app/MoveConfirmDialog.d.ts +5 -0
  161. package/dist/dashboard/app/MoveConfirmDialog.js +79 -0
  162. package/dist/dashboard/app/OverviewCell.js +8 -13
  163. package/dist/dashboard/app/ReadOnlyBadge.d.ts +1 -1
  164. package/dist/dashboard/app/RemoveDialog.d.ts +17 -0
  165. package/dist/dashboard/app/{DeleteDialog.js → RemoveDialog.js} +67 -27
  166. package/dist/dashboard/app/RemoveRedirect.d.ts +7 -0
  167. package/dist/dashboard/app/RemoveRedirect.js +123 -0
  168. package/dist/dashboard/app/SearchBar.d.ts +9 -0
  169. package/dist/dashboard/app/SearchBar.js +31 -0
  170. package/dist/dashboard/app/SidebarTree.js +29 -74
  171. package/dist/dashboard/app/WorkspaceMenu.js +8 -8
  172. package/dist/dashboard/app/WorkspaceRoots.js +11 -11
  173. package/dist/dashboard/app/editor/FileEditor.js +16 -16
  174. package/dist/dashboard/app/modals/CreateEntry.js +5 -5
  175. package/dist/dashboard/app/pages/EntryPage.d.ts +2 -1
  176. package/dist/dashboard/app/pages/EntryPage.js +35 -16
  177. package/dist/dashboard/app/pages/SplashPage.js +35 -35
  178. package/dist/dashboard/app/pages/UsersPage.js +14 -14
  179. package/dist/dashboard/app/ui/DashboardModal.js +17 -16
  180. package/dist/dashboard/atoms/dashboard.js +1 -1
  181. package/dist/dashboard/atoms/entry.js +1 -14
  182. package/dist/dashboard/atoms/entryTable.js +1 -0
  183. package/dist/dashboard/atoms/explorer.d.ts +4 -0
  184. package/dist/dashboard/atoms/explorer.js +19 -7
  185. package/dist/dashboard/atoms/graph.js +1 -1
  186. package/dist/dashboard/atoms/link.js +5 -2
  187. package/dist/dashboard/atoms/move.d.ts +5 -0
  188. package/dist/dashboard/atoms/move.js +29 -3
  189. package/dist/dashboard/atoms/moveConfirmation.d.ts +34 -0
  190. package/dist/dashboard/atoms/moveConfirmation.js +95 -0
  191. package/dist/dashboard/atoms/nav.d.ts +9 -5
  192. package/dist/dashboard/atoms/nav.js +120 -45
  193. package/dist/dashboard/atoms/overview.d.ts +6 -5
  194. package/dist/dashboard/atoms/overview.js +2 -16
  195. package/dist/dashboard/atoms/remove.d.ts +112 -0
  196. package/dist/dashboard/atoms/remove.js +268 -0
  197. package/dist/dashboard/atoms/root.d.ts +2 -2
  198. package/dist/dashboard/atoms/root.js +41 -26
  199. package/dist/dashboard/atoms/user.js +1 -1
  200. package/dist/dashboard/atoms/utils.js +1 -1
  201. package/dist/dashboard/boot/Boot.js +25 -17
  202. package/dist/dashboard/boot/BootProd.d.ts +6 -1
  203. package/dist/dashboard/boot/BootProd.js +2 -2
  204. package/dist/dashboard/boot/DashboardWorker.d.ts +1 -0
  205. package/dist/dashboard/boot/DashboardWorker.js +18 -18
  206. package/dist/dashboard/boot/LoadWorker.js +17 -10
  207. package/dist/dashboard/cms/EntryTable.js +6 -3
  208. package/dist/database/BrowserEntryStore.d.ts +17 -29
  209. package/dist/database/BrowserEntryStore.js +116 -144
  210. package/dist/database/DatabaseTables.js +2 -2
  211. package/dist/database/EntryDatabase.js +21 -1
  212. package/dist/database/EntryTransaction.js +0 -35
  213. package/dist/database/EntryUrlAliases.d.ts +4 -0
  214. package/dist/database/EntryUrlAliases.js +16 -10
  215. package/dist/database/driver/RuntimeDatabase.js +3 -3
  216. package/dist/database/driver/WasmDatabase.d.ts +5 -18
  217. package/dist/database/driver/WasmDatabase.js +15 -16
  218. package/dist/database/entry/EntryTable.js +2 -2
  219. package/dist/database/query/EntryQuery.js +1 -1
  220. package/dist/database/query/Relation.js +1 -1
  221. package/dist/database/query/Search.js +2 -2
  222. package/dist/field/check/CheckField.view.js +2 -2
  223. package/dist/field/code/CodeField.view.js +14 -14
  224. package/dist/field/link/EntryLink.d.ts +4 -4
  225. package/dist/field/link/FileLink.d.ts +4 -4
  226. package/dist/field/link/ImageLink.d.ts +4 -4
  227. package/dist/field/link/Link.d.ts +1 -1
  228. package/dist/field/link/LinkField.d.ts +5 -0
  229. package/dist/field/link/LinkField.view.js +246 -372
  230. package/dist/field/link/UrlLink.d.ts +4 -4
  231. package/dist/field/list/ListField.d.ts +2 -0
  232. package/dist/field/list/ListField.view.d.ts +15 -0
  233. package/dist/field/list/ListField.view.js +343 -301
  234. package/dist/field/metadata/MetadataField.d.ts +17 -7
  235. package/dist/field/metadata/MetadataField.js +14 -3
  236. package/dist/field/metadata/MetadataField.view.d.ts +1 -0
  237. package/dist/field/metadata/MetadataField.view.js +27 -23
  238. package/dist/field/richtext/RichTextBlock.d.ts +3 -1
  239. package/dist/field/richtext/RichTextBlock.js +178 -75
  240. package/dist/field/richtext/RichTextBlockHost.js +1 -1
  241. package/dist/field/richtext/RichTextExtensions.js +35 -35
  242. package/dist/field/richtext/RichTextField.view.js +14 -8
  243. package/dist/field/richtext/RichTextInsertMenu.js +43 -27
  244. package/dist/field/views.js +2 -0
  245. package/dist/index.css +490 -309
  246. package/dist/picker/url/UrlPicker.js +1 -0
  247. package/docs/components/badge.md +1 -0
  248. package/docs/components/button.md +1 -0
  249. package/docs/components/content-card.md +1 -0
  250. package/docs/components/search-field.md +1 -0
  251. package/docs/components/sortable-list.md +5 -20
  252. package/docs/components/table.md +1 -0
  253. package/docs/configuration.md +1 -1
  254. package/docs/deploy/self-host.md +1 -1
  255. package/docs/deploy.md +5 -4
  256. package/docs/fields.md +1 -1
  257. package/docs/index.md +1 -1
  258. package/docs/instant-publishing.md +7 -22
  259. package/docs/overviews.md +3 -4
  260. package/docs/upgrading.md +3 -2
  261. package/llms-full.txt +31 -55
  262. package/package.json +2 -3
  263. package/dist/core/db/EntryValidationError.d.ts +0 -13
  264. package/dist/core/db/EntryValidationError.js +0 -23
  265. package/dist/dashboard/app/DeleteDialog.d.ts +0 -11
  266. package/dist/dashboard/atoms/delete.d.ts +0 -68
  267. package/dist/dashboard/atoms/delete.js +0 -143
  268. package/dist/chunks/{chunk-MOWR65LM.js → chunk-PYDOMKJZ.js} +71 -71
@@ -38,19 +38,20 @@ export interface MetadataOptions extends FieldOptions<Metadata> {
38
38
  fields: Type<MetadataFields>;
39
39
  seo: Type<MetadataSeoFields>;
40
40
  details: Type<MetadataDetailsFields>;
41
- /** The details are rendered by a separate `metadataDetails` section */
42
- detailsSection?: boolean;
41
+ /** The details and previews are rendered by the separate
42
+ * `metadataDetails` and `metadataPreviews` sections */
43
+ sections?: boolean;
43
44
  }
44
45
  export interface MetadataConfig {
45
- /** Leave the details out of the field view, render them with
46
- * `metadataDetails(field)` instead */
47
- detailsSection?: boolean;
46
+ /** Leave the details and previews out of the field view, render them
47
+ * with `metadataDetails(field)` and `metadataPreviews()` instead */
48
+ sections?: boolean;
48
49
  }
49
50
  export declare class MetadataField extends RecordField<Metadata, MetadataOptions> {
50
51
  }
51
52
  export interface MetadataField extends MetadataFields {
52
53
  }
53
- export declare function metadata(label?: string, { detailsSection }?: MetadataConfig): MetadataField;
54
+ export declare function metadata(label?: string, { sections }?: MetadataConfig): MetadataField;
54
55
  export declare class MetadataDetailsSection implements SectionData {
55
56
  field: MetadataField;
56
57
  view: string;
@@ -60,5 +61,14 @@ export declare class MetadataDetailsSection implements SectionData {
60
61
  constructor(field: MetadataField);
61
62
  }
62
63
  /** Renders the created/updated details and aliases of a metadata field
63
- * created with `detailsSection: true` */
64
+ * created with `sections: true` */
64
65
  export declare function metadataDetails(field: MetadataField): Section;
66
+ export declare class MetadataPreviewsSection implements SectionData {
67
+ view: string;
68
+ definition: {};
69
+ fields: {};
70
+ sections: never[];
71
+ }
72
+ /** Renders the search and Open Graph previews of the entry, for a metadata
73
+ * field created with `sections: true` */
74
+ export declare function metadataPreviews(): Section;
@@ -19,7 +19,7 @@ import {
19
19
  export * from "./MetadataAudit.js";
20
20
  var MetadataField = class extends RecordField {
21
21
  };
22
- function metadata(label = "Metadata", { detailsSection } = {}) {
22
+ function metadata(label = "Metadata", { sections } = {}) {
23
23
  const seo = type("SEO", {
24
24
  fields: {
25
25
  title: text("Title"),
@@ -62,7 +62,7 @@ function metadata(label = "Metadata", { detailsSection } = {}) {
62
62
  fields,
63
63
  seo,
64
64
  details,
65
- detailsSection
65
+ sections
66
66
  },
67
67
  defaultValue() {
68
68
  return Type.initialValue(fields);
@@ -87,10 +87,21 @@ var MetadataDetailsSection = class {
87
87
  function metadataDetails(field) {
88
88
  return section(new MetadataDetailsSection(field));
89
89
  }
90
+ var MetadataPreviewsSection = class {
91
+ view = viewKeys.MetadataPreviewsView;
92
+ definition = {};
93
+ fields = {};
94
+ sections = [];
95
+ };
96
+ function metadataPreviews() {
97
+ return section(new MetadataPreviewsSection());
98
+ }
90
99
  export {
91
100
  MetadataDetailsSection,
92
101
  MetadataField,
102
+ MetadataPreviewsSection,
93
103
  aliases,
94
104
  metadata,
95
- metadataDetails
105
+ metadataDetails,
106
+ metadataPreviews
96
107
  };
@@ -12,6 +12,7 @@ export interface MetadataUserFieldViewProps {
12
12
  }
13
13
  export declare function MetadataUserFieldView({ field }: MetadataUserFieldViewProps): import("react").JSX.Element;
14
14
  export declare function MetadataFieldView({ field }: MetadataFieldViewProps): import("react").JSX.Element;
15
+ export declare function MetadataPreviewsView(): import("react").JSX.Element;
15
16
  export interface MetadataDetailsViewProps {
16
17
  section: Section;
17
18
  }
@@ -18,34 +18,34 @@ import { IcRoundPublic } from "alinea/dashboard/icons";
18
18
 
19
19
  // src/field/metadata/MetadataField.module.css
20
20
  var MetadataField_default = {
21
- "SearchEnginePreview-og-label-small": "alinea-SearchEnginePreview-og-label-small",
22
- "SearchEnginePreviewOgLabelSmall": "alinea-SearchEnginePreview-og-label-small",
23
- "SearchEnginePreview-og-label": "alinea-SearchEnginePreview-og-label",
24
- "SearchEnginePreviewOgLabel": "alinea-SearchEnginePreview-og-label",
25
- "OpenGraphPreview-image": "alinea-OpenGraphPreview-image",
26
- "OpenGraphPreviewImage": "alinea-OpenGraphPreview-image",
27
- "MetadataUserFieldView": "alinea-MetadataUserFieldView",
28
- "SearchEnginePreview": "alinea-SearchEnginePreview",
21
+ "OpenGraphPreview-site": "alinea-OpenGraphPreview-site",
22
+ "OpenGraphPreviewSite": "alinea-OpenGraphPreview-site",
23
+ "OpenGraphPreview-title": "alinea-OpenGraphPreview-title",
24
+ "OpenGraphPreviewTitle": "alinea-OpenGraphPreview-title",
25
+ "OpenGraphPreview-content": "alinea-OpenGraphPreview-content",
26
+ "OpenGraphPreviewContent": "alinea-OpenGraphPreview-content",
29
27
  "MetadataUserFieldView-contact": "alinea-MetadataUserFieldView-contact",
30
28
  "MetadataUserFieldViewContact": "alinea-MetadataUserFieldView-contact",
31
- "OpenGraphPreview": "alinea-OpenGraphPreview",
29
+ "SearchEnginePreview-og-label-small": "alinea-SearchEnginePreview-og-label-small",
30
+ "SearchEnginePreviewOgLabelSmall": "alinea-SearchEnginePreview-og-label-small",
32
31
  "OpenGraphPreview-description": "alinea-OpenGraphPreview-description",
33
32
  "OpenGraphPreviewDescription": "alinea-OpenGraphPreview-description",
34
- "OpenGraphPreview-content": "alinea-OpenGraphPreview-content",
35
- "OpenGraphPreviewContent": "alinea-OpenGraphPreview-content",
36
- "MetadataUserFieldView-person": "alinea-MetadataUserFieldView-person",
37
- "MetadataUserFieldViewPerson": "alinea-MetadataUserFieldView-person",
38
- "OpenGraphPreview-site": "alinea-OpenGraphPreview-site",
39
- "OpenGraphPreviewSite": "alinea-OpenGraphPreview-site",
40
- "MetadataTimestampFieldView": "alinea-MetadataTimestampFieldView",
41
33
  "SearchEnginePreview-link": "alinea-SearchEnginePreview-link",
42
34
  "SearchEnginePreviewLink": "alinea-SearchEnginePreview-link",
43
- "SearchEnginePreview-description": "alinea-SearchEnginePreview-description",
44
- "SearchEnginePreviewDescription": "alinea-SearchEnginePreview-description",
45
35
  "SearchEnginePreview-og": "alinea-SearchEnginePreview-og",
46
36
  "SearchEnginePreviewOg": "alinea-SearchEnginePreview-og",
47
- "OpenGraphPreview-title": "alinea-OpenGraphPreview-title",
48
- "OpenGraphPreviewTitle": "alinea-OpenGraphPreview-title"
37
+ "MetadataUserFieldView": "alinea-MetadataUserFieldView",
38
+ "SearchEnginePreview": "alinea-SearchEnginePreview",
39
+ "OpenGraphPreview": "alinea-OpenGraphPreview",
40
+ "MetadataTimestampFieldView": "alinea-MetadataTimestampFieldView",
41
+ "OpenGraphPreview-image": "alinea-OpenGraphPreview-image",
42
+ "OpenGraphPreviewImage": "alinea-OpenGraphPreview-image",
43
+ "SearchEnginePreview-description": "alinea-SearchEnginePreview-description",
44
+ "SearchEnginePreviewDescription": "alinea-SearchEnginePreview-description",
45
+ "MetadataUserFieldView-person": "alinea-MetadataUserFieldView-person",
46
+ "MetadataUserFieldViewPerson": "alinea-MetadataUserFieldView-person",
47
+ "SearchEnginePreview-og-label": "alinea-SearchEnginePreview-og-label",
48
+ "SearchEnginePreviewOgLabel": "alinea-SearchEnginePreview-og-label"
49
49
  };
50
50
 
51
51
  // src/field/metadata/MetadataField.view.tsx
@@ -78,19 +78,22 @@ function MetadataUserFieldView({ field }) {
78
78
  function MetadataFieldView({ field }) {
79
79
  const options = useFieldOptions(field);
80
80
  const node = useFieldNode(field);
81
- const metadata = usePreviewMetadata();
82
81
  return /* @__PURE__ */ jsxs(Fragment, { children: [
83
82
  /* @__PURE__ */ jsx(
84
83
  NodeEditor,
85
84
  {
86
85
  node,
87
86
  readOnly: options.readOnly,
88
- type: options.detailsSection ? options.seo : options.fields
87
+ type: options.sections ? options.seo : options.fields
89
88
  }
90
89
  ),
91
- /* @__PURE__ */ jsx(MetadataPreview, { metadata, origin })
90
+ !options.sections && /* @__PURE__ */ jsx(MetadataPreviewsView, {})
92
91
  ] });
93
92
  }
93
+ function MetadataPreviewsView() {
94
+ const metadata = usePreviewMetadata();
95
+ return /* @__PURE__ */ jsx(MetadataPreview, { metadata, origin });
96
+ }
94
97
  function MetadataDetailsView({ section }) {
95
98
  const { field } = section[Section.Data];
96
99
  const options = useFieldOptions(field);
@@ -159,6 +162,7 @@ function SearchEnginePreview({ metadata, origin: origin2 }) {
159
162
  export {
160
163
  MetadataDetailsView,
161
164
  MetadataFieldView,
165
+ MetadataPreviewsView,
162
166
  MetadataTimestampFieldView,
163
167
  MetadataUserFieldView
164
168
  };
@@ -7,5 +7,7 @@ export interface RichTextBlockProps {
7
7
  readOnly: boolean;
8
8
  onDelete: () => void;
9
9
  onDuplicate: () => void;
10
+ /** Called as the header starts a drag, before the editor handles it */
11
+ onDragStart: () => void;
10
12
  }
11
- export declare const RichTextBlock: import("react").MemoExoticComponent<({ id, node, type, readOnly, onDelete, onDuplicate }: RichTextBlockProps) => import("react").JSX.Element>;
13
+ export declare const RichTextBlock: import("react").MemoExoticComponent<({ id, node, type, readOnly, onDelete, onDuplicate, onDragStart }: RichTextBlockProps) => import("react").JSX.Element>;
@@ -1,5 +1,6 @@
1
1
  import {
2
- useAtomValueRaw
2
+ useAtomValueRaw,
3
+ useSetAtom
3
4
  } from "../../chunks/chunk-D6UJHBJJ.js";
4
5
  import "../../chunks/chunk-CFNRVI3Y.js";
5
6
  import {
@@ -10,39 +11,57 @@ import "../../chunks/chunk-CQ52GEHY.js";
10
11
  // src/field/richtext/RichTextBlock.tsx
11
12
  import {
12
13
  Button,
14
+ SheetBody,
15
+ SheetClose,
16
+ SheetContent,
17
+ SheetFooter,
18
+ SheetHeader,
19
+ SheetSection,
20
+ SheetTitle,
13
21
  SortableList,
14
22
  SortableListItemTitle,
23
+ SortableListItemTrigger,
15
24
  SortableListItem,
16
25
  SortableListItemActions,
17
26
  SortableListItemContent,
18
- SortableListHandle,
19
27
  SortableListItemHeader,
20
- SortableListItemSettings,
21
- Popover,
22
- PopoverContent,
23
- PopoverTrigger
28
+ SortableListItemDescription,
29
+ SortableListItemToggle,
30
+ TextField,
31
+ Tooltip,
32
+ TooltipContent,
33
+ TooltipTrigger
24
34
  } from "alinea/components";
25
35
  import { getType } from "alinea/core/Internal";
26
36
  import { Type } from "alinea/core/Type";
37
+ import { slugify } from "alinea/core/util/Slugs";
27
38
  import { Badge } from "alinea/components";
39
+ import { BlockSheet, useBlockSheet } from "alinea/dashboard/app/BlockSheet";
28
40
  import { NodeEditor } from "alinea/dashboard/app/NodeEditor";
29
41
  import { ReactiveNode } from "alinea/dashboard/atoms/ReactiveNode";
42
+ import { useEntry } from "alinea/dashboard/hooks";
30
43
  import {
31
44
  IcBaselineContentCopy,
32
45
  IcRoundClose,
33
- IcRoundMoreHoriz
46
+ IcRoundDelete,
47
+ IcRoundLink
34
48
  } from "alinea/dashboard/icons";
49
+ import { SlugField } from "alinea/field/path/SlugField";
35
50
  import { memo, useMemo, useState } from "react";
36
51
 
37
52
  // src/field/richtext/RichTextBlock.module.css
38
53
  var RichTextBlock_default = {
39
- "RichTextBlock-dragHandle": "alinea-RichTextBlock-dragHandle",
40
- "RichTextBlockDragHandle": "alinea-RichTextBlock-dragHandle",
41
- "RichTextBlock": "alinea-RichTextBlock"
54
+ "RichTextBlock": "alinea-RichTextBlock",
55
+ "RichTextBlock-header": "alinea-RichTextBlock-header",
56
+ "RichTextBlockHeader": "alinea-RichTextBlock-header",
57
+ "RichTextBlock-anchor-field": "alinea-RichTextBlock-anchor-field",
58
+ "RichTextBlockAnchorField": "alinea-RichTextBlock-anchor-field",
59
+ "RichTextBlock-anchor": "alinea-RichTextBlock-anchor",
60
+ "RichTextBlockAnchor": "alinea-RichTextBlock-anchor"
42
61
  };
43
62
 
44
63
  // src/field/richtext/RichTextBlock.tsx
45
- import { jsx, jsxs } from "react/jsx-runtime";
64
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
46
65
  var styles = dist_default(RichTextBlock_default);
47
66
  var RichTextBlock = memo(function RichTextBlock2({
48
67
  id,
@@ -50,90 +69,174 @@ var RichTextBlock = memo(function RichTextBlock2({
50
69
  type,
51
70
  readOnly,
52
71
  onDelete,
53
- onDuplicate
72
+ onDuplicate,
73
+ onDragStart
54
74
  }) {
55
75
  const label = Type.label(type);
56
76
  const typeIcon = getType(type).icon;
57
- const [actionsOpen, setActionsOpen] = useState(false);
58
- function closeActions() {
59
- setActionsOpen(false);
77
+ const sheet = useBlockSheet(id);
78
+ const [expanded, setExpanded] = useState(true);
79
+ const customLabel = useAtomValueRaw(node.field("_label")) ?? "";
80
+ const setCustomLabel = useSetAtom(node.field("_label"));
81
+ const anchor = useAtomValueRaw(node.field("_anchor"));
82
+ const setAnchor = useSetAtom(node.field("_anchor"));
83
+ const entryUrl = useEntry()?.url;
84
+ const displayLabel = customLabel.trim();
85
+ const displayAnchor = (anchor ?? slugify(displayLabel)).trim();
86
+ const link = entryUrl && displayAnchor ? `${entryUrl}#${displayAnchor}` : void 0;
87
+ function updateCustomLabel(nextValue) {
88
+ setCustomLabel(nextValue || void 0);
89
+ if (anchor === void 0 || anchor === slugify(customLabel))
90
+ setAnchor(slugify(nextValue) || void 0);
60
91
  }
61
- return /* @__PURE__ */ jsx(
62
- SortableList,
63
- {
64
- className: styles.RichTextBlock(),
65
- "data-depth": "muted",
66
- "data-read-only": readOnly || void 0,
67
- "data-richtext-block": "true",
68
- children: /* @__PURE__ */ jsxs(SortableListItem, { tabIndex: 0, children: [
69
- /* @__PURE__ */ jsxs(SortableListItemHeader, { "data-richtext-block-header": "true", children: [
70
- !readOnly && /* @__PURE__ */ jsx(
71
- SortableListHandle,
92
+ function updateAnchor(nextValue) {
93
+ setAnchor(slugify(nextValue.replace(/^#+/, "")) || void 0);
94
+ }
95
+ const badge = /* @__PURE__ */ jsx(Badge, { icon: typeIcon, size: "sm", color: "primary", children: label });
96
+ const title = /* @__PURE__ */ jsxs(Fragment, { children: [
97
+ badge,
98
+ displayLabel ? /* @__PURE__ */ jsx(SortableListItemDescription, { children: displayLabel }) : displayAnchor && /* @__PURE__ */ jsxs(Badge, { size: "sm", children: [
99
+ "#",
100
+ displayAnchor
101
+ ] })
102
+ ] });
103
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
104
+ /* @__PURE__ */ jsx(
105
+ SortableList,
106
+ {
107
+ className: styles.RichTextBlock(),
108
+ "data-read-only": readOnly || void 0,
109
+ "data-richtext-block": "true",
110
+ children: /* @__PURE__ */ jsxs(SortableListItem, { tabIndex: 0, current: sheet.open, children: [
111
+ /* @__PURE__ */ jsxs(
112
+ SortableListItemHeader,
72
113
  {
73
- "aria-label": `Drag ${label} block`,
74
- className: styles.RichTextBlock.dragHandle(),
75
- "data-richtext-drag-handle": "true",
76
- draggable: true,
114
+ className: styles.RichTextBlock.header(),
115
+ "data-richtext-block-header": "true",
116
+ "data-richtext-drag-handle": readOnly ? void 0 : "true",
117
+ draggable: !readOnly,
118
+ onDragStartCapture: onDragStart,
77
119
  onDragStart: (event) => {
78
120
  event.dataTransfer.effectAllowed = "move";
79
121
  event.dataTransfer.setData(
80
122
  "application/x-alinea-richtext-block",
81
123
  id
82
124
  );
83
- }
84
- }
85
- ),
86
- /* @__PURE__ */ jsx(SortableListItemTitle, { children: /* @__PURE__ */ jsx(Badge, { icon: typeIcon, size: "sm", children: label }) }),
87
- /* @__PURE__ */ jsxs(SortableListItemActions, { children: [
88
- /* @__PURE__ */ jsxs(Popover, { open: actionsOpen, onOpenChange: setActionsOpen, children: [
89
- /* @__PURE__ */ jsx(
90
- PopoverTrigger,
91
- {
92
- variant: "ghost",
93
- "aria-label": `${label} actions`,
94
- icon: IcRoundMoreHoriz,
95
- size: "icon-sm"
96
- }
97
- ),
98
- /* @__PURE__ */ jsx(
99
- PopoverContent,
100
- {
101
- "aria-label": `${label} actions`,
102
- side: "bottom",
103
- align: "end",
104
- children: /* @__PURE__ */ jsx(SortableListItemSettings, { variant: "actions", children: /* @__PURE__ */ jsx(
105
- Button,
125
+ },
126
+ children: [
127
+ /* @__PURE__ */ jsxs(SortableListItemTitle, { children: [
128
+ /* @__PURE__ */ jsx(
129
+ SortableListItemToggle,
130
+ {
131
+ draggable: !readOnly,
132
+ "aria-label": expanded ? `Collapse ${label}` : `Expand ${label}`,
133
+ expanded,
134
+ onClick: () => setExpanded(!expanded)
135
+ }
136
+ ),
137
+ sheet.available ? /* @__PURE__ */ jsx(
138
+ SortableListItemTrigger,
106
139
  {
107
- variant: "ghost",
108
- icon: IcBaselineContentCopy,
109
- disabled: readOnly,
140
+ ...sheet.triggerProps,
141
+ draggable: !readOnly,
142
+ "aria-label": `${label} settings`,
143
+ "aria-expanded": sheet.open,
110
144
  onClick: () => {
111
- onDuplicate();
112
- closeActions();
145
+ if (!sheet.open) setExpanded(true);
146
+ sheet.toggle();
113
147
  },
114
- children: "Duplicate"
148
+ children: title
115
149
  }
116
- ) })
117
- }
118
- )
119
- ] }),
150
+ ) : title
151
+ ] }),
152
+ /* @__PURE__ */ jsx(SortableListItemActions, { children: /* @__PURE__ */ jsx(
153
+ Button,
154
+ {
155
+ variant: "ghost",
156
+ "aria-label": `Remove ${label}`,
157
+ icon: IcRoundClose,
158
+ disabled: readOnly,
159
+ onClick: onDelete,
160
+ size: "icon-sm"
161
+ }
162
+ ) })
163
+ ]
164
+ }
165
+ ),
166
+ expanded && /* @__PURE__ */ jsx(SortableListItemContent, { "data-richtext-block-editor": "true", children: readOnly ? /* @__PURE__ */ jsx(ReadOnlyBlockEditor, { node, type }) : /* @__PURE__ */ jsx(NodeEditor, { node, type }) })
167
+ ] })
168
+ }
169
+ ),
170
+ /* @__PURE__ */ jsx(BlockSheet, { id, children: /* @__PURE__ */ jsxs(SheetContent, { onClose: () => sheet.setOpen(false), children: [
171
+ /* @__PURE__ */ jsxs(SheetHeader, { children: [
172
+ badge,
173
+ /* @__PURE__ */ jsx(SheetTitle, { children: displayLabel || displayAnchor && `#${displayAnchor}` || label }),
174
+ /* @__PURE__ */ jsx(SheetClose, { "aria-label": "Close block settings" })
175
+ ] }),
176
+ /* @__PURE__ */ jsx(SheetBody, { children: /* @__PURE__ */ jsxs(SheetSection, { children: [
177
+ /* @__PURE__ */ jsx(
178
+ TextField,
179
+ {
180
+ label: "Label",
181
+ disabled: readOnly,
182
+ onValueChange: updateCustomLabel,
183
+ value: customLabel
184
+ }
185
+ ),
186
+ /* @__PURE__ */ jsxs("div", { className: styles.RichTextBlock.anchor(), children: [
187
+ /* @__PURE__ */ jsx("div", { className: styles.RichTextBlock.anchor.field(), children: /* @__PURE__ */ jsx(
188
+ SlugField,
189
+ {
190
+ fieldValue: anchor,
191
+ label: "Anchor",
192
+ isDisabled: readOnly,
193
+ onChange: updateAnchor,
194
+ source: customLabel
195
+ }
196
+ ) }),
197
+ link && /* @__PURE__ */ jsxs(Tooltip, { children: [
120
198
  /* @__PURE__ */ jsx(
121
- Button,
199
+ TooltipTrigger,
122
200
  {
123
201
  variant: "ghost",
124
- "aria-label": `Remove ${label}`,
125
- icon: IcRoundClose,
126
- disabled: readOnly,
127
- onClick: onDelete,
128
- size: "icon-sm"
202
+ size: "icon",
203
+ icon: IcRoundLink,
204
+ "aria-label": "Copy link to block",
205
+ onClick: () => navigator.clipboard.writeText(link)
129
206
  }
130
- )
207
+ ),
208
+ /* @__PURE__ */ jsx(TooltipContent, { children: "Copy link to block" })
131
209
  ] })
132
- ] }),
133
- /* @__PURE__ */ jsx(SortableListItemContent, { "data-richtext-block-editor": "true", children: readOnly ? /* @__PURE__ */ jsx(ReadOnlyBlockEditor, { node, type }) : /* @__PURE__ */ jsx(NodeEditor, { node, type }) })
134
- ] })
135
- }
136
- );
210
+ ] })
211
+ ] }) }),
212
+ /* @__PURE__ */ jsx(SheetFooter, { children: /* @__PURE__ */ jsx(
213
+ Button,
214
+ {
215
+ variant: "ghost",
216
+ size: "sm",
217
+ icon: IcBaselineContentCopy,
218
+ disabled: readOnly,
219
+ onClick: () => {
220
+ onDuplicate();
221
+ sheet.setOpen(false);
222
+ },
223
+ children: "Duplicate"
224
+ }
225
+ ) }),
226
+ /* @__PURE__ */ jsx(SheetFooter, { children: /* @__PURE__ */ jsx(
227
+ Button,
228
+ {
229
+ variant: "ghost",
230
+ size: "sm",
231
+ color: "destructive",
232
+ icon: IcRoundDelete,
233
+ disabled: readOnly,
234
+ onClick: onDelete,
235
+ children: "Delete"
236
+ }
237
+ ) })
238
+ ] }) })
239
+ ] });
137
240
  });
138
241
  function ReadOnlyBlockEditor({ node, type }) {
139
242
  const value = useAtomValueRaw(node.value);
@@ -34,7 +34,7 @@ var RichTextBlockHosts = class {
34
34
  },
35
35
  stopEvent(event) {
36
36
  const target = event.target;
37
- const dragHandle = target instanceof Element && target.closest("[data-richtext-drag-handle]");
37
+ const dragHandle = target instanceof Element && target.closest("[data-richtext-drag-handle]") && !target.closest('button, a, input, [role="button"]');
38
38
  if (event.type.startsWith("drag") || event.type === "drop")
39
39
  return false;
40
40
  return !dragHandle;
@@ -1,3 +1,8 @@
1
+ import {
2
+ Dropcursor,
3
+ Gapcursor,
4
+ UndoRedo
5
+ } from "../../chunks/chunk-AC5ATYI3.js";
1
6
  import {
2
7
  CellSelection,
3
8
  addColumnAfter,
@@ -18,11 +23,6 @@ import {
18
23
  toggleHeader,
19
24
  toggleHeaderCell
20
25
  } from "../../chunks/chunk-PAYSVIYI.js";
21
- import {
22
- Dropcursor,
23
- Gapcursor,
24
- UndoRedo
25
- } from "../../chunks/chunk-AC5ATYI3.js";
26
26
  import {
27
27
  Extension,
28
28
  Fragment,
@@ -2970,46 +2970,46 @@ import Small from "./extensions/Small.js";
2970
2970
 
2971
2971
  // src/field/richtext/RichTextExtensions.module.css
2972
2972
  var RichTextExtensions_default = {
2973
- "RichTextExtensions-tableCell": "alinea-RichTextExtensions-tableCell",
2974
- "RichTextExtensionsTableCell": "alinea-RichTextExtensions-tableCell",
2975
- "RichTextExtensions-tableHeader": "alinea-RichTextExtensions-tableHeader",
2976
- "RichTextExtensionsTableHeader": "alinea-RichTextExtensions-tableHeader",
2977
- "RichTextExtensions-paragraph": "alinea-RichTextExtensions-paragraph",
2978
- "RichTextExtensionsParagraph": "alinea-RichTextExtensions-paragraph",
2979
- "RichTextExtensions-listItem": "alinea-RichTextExtensions-listItem",
2980
- "RichTextExtensionsListItem": "alinea-RichTextExtensions-listItem",
2981
- "RichTextExtensions-anchor": "alinea-RichTextExtensions-anchor",
2982
- "RichTextExtensionsAnchor": "alinea-RichTextExtensions-anchor",
2983
- "RichTextExtensions-highlight": "alinea-RichTextExtensions-highlight",
2984
- "RichTextExtensionsHighlight": "alinea-RichTextExtensions-highlight",
2985
- "is-level4": "alinea-is-level4",
2986
- "isLevel4": "alinea-is-level4",
2987
2973
  "RichTextExtensions-bulletList": "alinea-RichTextExtensions-bulletList",
2988
2974
  "RichTextExtensionsBulletList": "alinea-RichTextExtensions-bulletList",
2989
- "RichTextExtensions-orderedList": "alinea-RichTextExtensions-orderedList",
2990
- "RichTextExtensionsOrderedList": "alinea-RichTextExtensions-orderedList",
2975
+ "RichTextExtensions-image": "alinea-RichTextExtensions-image",
2976
+ "RichTextExtensionsImage": "alinea-RichTextExtensions-image",
2977
+ "is-level6": "alinea-is-level6",
2978
+ "isLevel6": "alinea-is-level6",
2991
2979
  "is-level2": "alinea-is-level2",
2992
2980
  "isLevel2": "alinea-is-level2",
2981
+ "is-level3": "alinea-is-level3",
2982
+ "isLevel3": "alinea-is-level3",
2993
2983
  "RichTextExtensions-link": "alinea-RichTextExtensions-link",
2994
2984
  "RichTextExtensionsLink": "alinea-RichTextExtensions-link",
2995
- "is-level1": "alinea-is-level1",
2996
- "isLevel1": "alinea-is-level1",
2997
- "RichTextExtensions-image": "alinea-RichTextExtensions-image",
2998
- "RichTextExtensionsImage": "alinea-RichTextExtensions-image",
2985
+ "RichTextExtensions-blockquote": "alinea-RichTextExtensions-blockquote",
2986
+ "RichTextExtensionsBlockquote": "alinea-RichTextExtensions-blockquote",
2987
+ "is-level4": "alinea-is-level4",
2988
+ "isLevel4": "alinea-is-level4",
2999
2989
  "RichTextExtensions-rule": "alinea-RichTextExtensions-rule",
3000
2990
  "RichTextExtensionsRule": "alinea-RichTextExtensions-rule",
3001
- "RichTextExtensions-heading": "alinea-RichTextExtensions-heading",
3002
- "RichTextExtensionsHeading": "alinea-RichTextExtensions-heading",
2991
+ "is-level5": "alinea-is-level5",
2992
+ "isLevel5": "alinea-is-level5",
2993
+ "RichTextExtensions-orderedList": "alinea-RichTextExtensions-orderedList",
2994
+ "RichTextExtensionsOrderedList": "alinea-RichTextExtensions-orderedList",
2995
+ "is-level1": "alinea-is-level1",
2996
+ "isLevel1": "alinea-is-level1",
2997
+ "RichTextExtensions-tableCell": "alinea-RichTextExtensions-tableCell",
2998
+ "RichTextExtensionsTableCell": "alinea-RichTextExtensions-tableCell",
3003
2999
  "RichTextExtensions-table": "alinea-RichTextExtensions-table",
3004
3000
  "RichTextExtensionsTable": "alinea-RichTextExtensions-table",
3005
- "is-level3": "alinea-is-level3",
3006
- "isLevel3": "alinea-is-level3",
3007
- "is-level6": "alinea-is-level6",
3008
- "isLevel6": "alinea-is-level6",
3009
- "RichTextExtensions-blockquote": "alinea-RichTextExtensions-blockquote",
3010
- "RichTextExtensionsBlockquote": "alinea-RichTextExtensions-blockquote",
3011
- "is-level5": "alinea-is-level5",
3012
- "isLevel5": "alinea-is-level5"
3001
+ "RichTextExtensions-heading": "alinea-RichTextExtensions-heading",
3002
+ "RichTextExtensionsHeading": "alinea-RichTextExtensions-heading",
3003
+ "RichTextExtensions-listItem": "alinea-RichTextExtensions-listItem",
3004
+ "RichTextExtensionsListItem": "alinea-RichTextExtensions-listItem",
3005
+ "RichTextExtensions-anchor": "alinea-RichTextExtensions-anchor",
3006
+ "RichTextExtensionsAnchor": "alinea-RichTextExtensions-anchor",
3007
+ "RichTextExtensions-paragraph": "alinea-RichTextExtensions-paragraph",
3008
+ "RichTextExtensionsParagraph": "alinea-RichTextExtensions-paragraph",
3009
+ "RichTextExtensions-tableHeader": "alinea-RichTextExtensions-tableHeader",
3010
+ "RichTextExtensionsTableHeader": "alinea-RichTextExtensions-tableHeader",
3011
+ "RichTextExtensions-highlight": "alinea-RichTextExtensions-highlight",
3012
+ "RichTextExtensionsHighlight": "alinea-RichTextExtensions-highlight"
3013
3013
  };
3014
3014
 
3015
3015
  // src/field/richtext/RichTextExtensions.ts