alinea 2.0.0-preview.2 → 2.0.0-preview.3

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 (101) hide show
  1. package/dist/.init/content/pages/welcome.json +1 -1
  2. package/dist/LICENSES.md +63 -63
  3. package/dist/adapter/next/previews.js +3 -1
  4. package/dist/adapter/next/previews.spec.d.ts +1 -0
  5. package/dist/bundled.d.ts +63 -17
  6. package/dist/chunks/{chunk-UVOEM4AH.js → chunk-HFBZMKIN.js} +1 -1
  7. package/dist/cli/Serve.js +1 -1
  8. package/dist/cli/bin.js +1 -1
  9. package/dist/cloud/CloudRemote.js +1 -1
  10. package/dist/components/Breadcrumbs.js +2 -2
  11. package/dist/components/Calendar.js +5 -5
  12. package/dist/components/Checkbox.js +3 -3
  13. package/dist/components/ComboBox.js +12 -12
  14. package/dist/components/DateField.js +3 -3
  15. package/dist/components/DatePicker.js +5 -5
  16. package/dist/components/DateRangePicker.js +7 -7
  17. package/dist/components/Disclosure.js +8 -8
  18. package/dist/components/Label.js +6 -6
  19. package/dist/components/List.js +29 -29
  20. package/dist/components/Menu.js +4 -4
  21. package/dist/components/Modal.js +4 -4
  22. package/dist/components/MultipleSelect.js +24 -24
  23. package/dist/components/NumberField.js +5 -5
  24. package/dist/components/ProgressCircle.js +3 -3
  25. package/dist/components/RadioGroup.js +2 -2
  26. package/dist/components/SearchField.js +7 -7
  27. package/dist/components/Select.js +8 -8
  28. package/dist/components/Surface.js +3 -3
  29. package/dist/components/Table.js +8 -8
  30. package/dist/components/Tabs.js +4 -4
  31. package/dist/components/TagGroup.js +2 -2
  32. package/dist/components/TextField.js +4 -4
  33. package/dist/components/TimeField.js +3 -3
  34. package/dist/components/Toolbar.js +3 -3
  35. package/dist/components/Tooltip.js +3 -3
  36. package/dist/components/Tree.d.ts +4 -2
  37. package/dist/components/Tree.js +18 -4
  38. package/dist/core/Graph.d.ts +1 -1
  39. package/dist/core/Infer.d.ts +8 -1
  40. package/dist/core/db/EntryAliases.js +1 -4
  41. package/dist/core/db/EntryResolver.js +6 -6
  42. package/dist/core/db/EntryTransaction.js +1 -0
  43. package/dist/core/db/Operation.d.ts +2 -2
  44. package/dist/core/db/Operation.js +11 -1
  45. package/dist/dashboard/App.js +8 -2
  46. package/dist/dashboard/app/AccessDenied.d.ts +16 -1
  47. package/dist/dashboard/app/AccessDenied.js +20 -11
  48. package/dist/dashboard/app/ActivityStatus.js +15 -15
  49. package/dist/dashboard/app/AppShell.js +2 -2
  50. package/dist/dashboard/app/AuthView.js +8 -8
  51. package/dist/dashboard/app/CompactField.js +13 -13
  52. package/dist/dashboard/app/DashboardErrorBoundary.js +5 -5
  53. package/dist/dashboard/app/EntryHeader.js +7 -7
  54. package/dist/dashboard/app/EntryReferences.js +10 -10
  55. package/dist/dashboard/app/EntrySidebar.js +11 -11
  56. package/dist/dashboard/app/EntrySidebarPreview.js +52 -26
  57. package/dist/dashboard/app/EntrySidebarPreview.story.d.ts +6 -1
  58. package/dist/dashboard/app/EntryTranslationBanner.js +5 -5
  59. package/dist/dashboard/app/Explorer.d.ts +2 -1
  60. package/dist/dashboard/app/Explorer.js +56 -44
  61. package/dist/dashboard/app/ExplorerCards.js +42 -46
  62. package/dist/dashboard/app/ExplorerFileCard.js +18 -18
  63. package/dist/dashboard/app/ExplorerList.js +11 -11
  64. package/dist/dashboard/app/ExplorerModal.js +5 -5
  65. package/dist/dashboard/app/ExplorerTable.js +53 -53
  66. package/dist/dashboard/app/LinkPicker.js +34 -9
  67. package/dist/dashboard/app/LocaleMenu.js +5 -5
  68. package/dist/dashboard/app/SidebarLayout.js +3 -3
  69. package/dist/dashboard/app/SidebarTree.js +48 -56
  70. package/dist/dashboard/app/WorkspaceMenu.js +11 -11
  71. package/dist/dashboard/app/WorkspaceRoots.js +24 -24
  72. package/dist/dashboard/app/editor/FileEditor.js +26 -26
  73. package/dist/dashboard/app/editor/FilePreview.js +4 -4
  74. package/dist/dashboard/app/modals/CreateEntry.js +2 -2
  75. package/dist/dashboard/app/pages/EntryPage.js +17 -17
  76. package/dist/dashboard/app/pages/UsersPage.js +35 -35
  77. package/dist/dashboard/app/ui/DashboardModal.js +17 -17
  78. package/dist/dashboard/app/ui/Rail.js +2 -2
  79. package/dist/dashboard/app/ui/Sidebar.js +2 -2
  80. package/dist/field/check/CheckField.view.js +2 -2
  81. package/dist/field/code/CodeField.view.js +11 -11
  82. package/dist/field/link/EntryLink.d.ts +1 -1
  83. package/dist/field/link/EntryLink.js +1 -0
  84. package/dist/field/link/Link.js +1 -0
  85. package/dist/field/link/LinkField.d.ts +5 -0
  86. package/dist/field/link/LinkField.view.js +58 -41
  87. package/dist/field/list/ListField.view.js +14 -14
  88. package/dist/field/metadata/MetadataField.d.ts +2 -0
  89. package/dist/field/metadata/MetadataField.js +2 -1
  90. package/dist/field/metadata/MetadataField.view.js +19 -19
  91. package/dist/field/richtext/RichTextBlock.js +2 -2
  92. package/dist/field/richtext/RichTextExtensions.js +24 -24
  93. package/dist/field/richtext/RichTextField.view.js +4 -4
  94. package/dist/field/richtext/RichTextInsertMenu.js +3 -3
  95. package/dist/index.css +21 -0
  96. package/dist/preview/PreviewMessage.d.ts +3 -0
  97. package/dist/preview/PreviewMessage.js +1 -0
  98. package/dist/preview/RegisterPreview.js +29 -9
  99. package/dist/preview/widget.js +6 -12
  100. package/dist/query.d.ts +7 -7
  101. package/package.json +1 -1
@@ -56,54 +56,54 @@ import { SidebarHeader } from "../ui/Sidebar.js";
56
56
 
57
57
  // src/dashboard/app/pages/UsersPage.module.css
58
58
  var UsersPage_default = {
59
- "UsersPage-createButton": "alinea-UsersPage-createButton",
60
- "UsersPageCreateButton": "alinea-UsersPage-createButton",
61
- "UsersPage-noRoles": "alinea-UsersPage-noRoles",
62
- "UsersPageNoRoles": "alinea-UsersPage-noRoles",
63
- "UsersPageSidebar-item": "alinea-UsersPageSidebar-item",
64
- "UsersPageSidebarItem": "alinea-UsersPageSidebar-item",
65
- "UsersPage-identity-text": "alinea-UsersPage-identity-text",
66
- "UsersPageIdentityText": "alinea-UsersPage-identity-text",
67
- "UsersPageSidebar-footer": "alinea-UsersPageSidebar-footer",
68
- "UsersPageSidebarFooter": "alinea-UsersPageSidebar-footer",
69
- "UsersPage-header": "alinea-UsersPage-header",
70
- "UsersPageHeader": "alinea-UsersPage-header",
71
- "UsersPage-identity-email": "alinea-UsersPage-identity-email",
72
- "UsersPageIdentityEmail": "alinea-UsersPage-identity-email",
73
- "UsersPage-table": "alinea-UsersPage-table",
74
- "UsersPageTable": "alinea-UsersPage-table",
75
- "UsersPage-header-title": "alinea-UsersPage-header-title",
76
- "UsersPageHeaderTitle": "alinea-UsersPage-header-title",
77
- "UsersPage-content": "alinea-UsersPage-content",
78
- "UsersPageContent": "alinea-UsersPage-content",
79
59
  "UsersPage-empty": "alinea-UsersPage-empty",
80
60
  "UsersPageEmpty": "alinea-UsersPage-empty",
81
- "UsersPage-status": "alinea-UsersPage-status",
82
- "UsersPageStatus": "alinea-UsersPage-status",
83
- "UsersPage": "alinea-UsersPage",
84
- "UsersPage-roles": "alinea-UsersPage-roles",
85
- "UsersPageRoles": "alinea-UsersPage-roles",
86
- "UsersPage-status-text": "alinea-UsersPage-status-text",
87
- "UsersPageStatusText": "alinea-UsersPage-status-text",
88
- "UsersPage-form-fields": "alinea-UsersPage-form-fields",
89
- "UsersPageFormFields": "alinea-UsersPage-form-fields",
90
61
  "UsersPage-identity": "alinea-UsersPage-identity",
91
62
  "UsersPageIdentity": "alinea-UsersPage-identity",
63
+ "UsersPage-createButton": "alinea-UsersPage-createButton",
64
+ "UsersPageCreateButton": "alinea-UsersPage-createButton",
65
+ "UsersPage-status": "alinea-UsersPage-status",
66
+ "UsersPageStatus": "alinea-UsersPage-status",
67
+ "UsersPage-header": "alinea-UsersPage-header",
68
+ "UsersPageHeader": "alinea-UsersPage-header",
69
+ "UsersPage-confirmation": "alinea-UsersPage-confirmation",
70
+ "UsersPageConfirmation": "alinea-UsersPage-confirmation",
92
71
  "UsersPage-identity-title": "alinea-UsersPage-identity-title",
93
72
  "UsersPageIdentityTitle": "alinea-UsersPage-identity-title",
73
+ "UsersPage-status-text": "alinea-UsersPage-status-text",
74
+ "UsersPageStatusText": "alinea-UsersPage-status-text",
94
75
  "UsersPage-rolesCell": "alinea-UsersPage-rolesCell",
95
76
  "UsersPageRolesCell": "alinea-UsersPage-rolesCell",
96
- "UsersPage-form-error": "alinea-UsersPage-form-error",
97
- "UsersPageFormError": "alinea-UsersPage-form-error",
98
- "UsersPage-confirmation": "alinea-UsersPage-confirmation",
99
- "UsersPageConfirmation": "alinea-UsersPage-confirmation",
100
- "UsersPageSidebar": "alinea-UsersPageSidebar",
77
+ "UsersPage": "alinea-UsersPage",
78
+ "UsersPageSidebar-item": "alinea-UsersPageSidebar-item",
79
+ "UsersPageSidebarItem": "alinea-UsersPageSidebar-item",
80
+ "UsersPage-header-title": "alinea-UsersPage-header-title",
81
+ "UsersPageHeaderTitle": "alinea-UsersPage-header-title",
82
+ "UsersPage-noRoles": "alinea-UsersPage-noRoles",
83
+ "UsersPageNoRoles": "alinea-UsersPage-noRoles",
101
84
  "UsersPageSidebar-nav": "alinea-UsersPageSidebar-nav",
102
85
  "UsersPageSidebarNav": "alinea-UsersPageSidebar-nav",
86
+ "UsersPage-form-fields": "alinea-UsersPage-form-fields",
87
+ "UsersPageFormFields": "alinea-UsersPage-form-fields",
88
+ "UsersPage-form-error": "alinea-UsersPage-form-error",
89
+ "UsersPageFormError": "alinea-UsersPage-form-error",
103
90
  "UsersPageSidebar-icon": "alinea-UsersPageSidebar-icon",
104
91
  "UsersPageSidebarIcon": "alinea-UsersPageSidebar-icon",
92
+ "UsersPageSidebar-footer": "alinea-UsersPageSidebar-footer",
93
+ "UsersPageSidebarFooter": "alinea-UsersPageSidebar-footer",
94
+ "UsersPageSidebar": "alinea-UsersPageSidebar",
105
95
  "UsersPage-search": "alinea-UsersPage-search",
106
- "UsersPageSearch": "alinea-UsersPage-search"
96
+ "UsersPageSearch": "alinea-UsersPage-search",
97
+ "UsersPage-content": "alinea-UsersPage-content",
98
+ "UsersPageContent": "alinea-UsersPage-content",
99
+ "UsersPage-table": "alinea-UsersPage-table",
100
+ "UsersPageTable": "alinea-UsersPage-table",
101
+ "UsersPage-identity-text": "alinea-UsersPage-identity-text",
102
+ "UsersPageIdentityText": "alinea-UsersPage-identity-text",
103
+ "UsersPage-identity-email": "alinea-UsersPage-identity-email",
104
+ "UsersPageIdentityEmail": "alinea-UsersPage-identity-email",
105
+ "UsersPage-roles": "alinea-UsersPage-roles",
106
+ "UsersPageRoles": "alinea-UsersPage-roles"
107
107
  };
108
108
 
109
109
  // src/dashboard/app/pages/UsersPage.tsx
@@ -24,32 +24,32 @@ import { IcRoundClose } from "../../icons.js";
24
24
 
25
25
  // src/dashboard/app/ui/DashboardModal.module.css
26
26
  var DashboardModal_default = {
27
+ "DashboardModalFooter": "alinea-DashboardModalFooter",
27
28
  "DashboardModalContent": "alinea-DashboardModalContent",
28
- "is-explorer": "alinea-is-explorer",
29
- "isExplorer": "alinea-is-explorer",
30
29
  "DashboardModal": "alinea-DashboardModal",
30
+ "DashboardModalOverlay": "alinea-DashboardModalOverlay",
31
+ "DashboardModalFormHeader": "alinea-DashboardModalFormHeader",
32
+ "DashboardModalDialog": "alinea-DashboardModalDialog",
31
33
  "DashboardModalDialog-header": "alinea-DashboardModalDialog-header",
32
34
  "DashboardModalDialogHeader": "alinea-DashboardModalDialog-header",
33
- "DashboardModalSeparator": "alinea-DashboardModalSeparator",
34
- "DashboardModalFormFooter": "alinea-DashboardModalFormFooter",
35
- "DashboardModalDialog": "alinea-DashboardModalDialog",
36
- "DashboardModalForm": "alinea-DashboardModalForm",
37
- "DashboardModalOverlay": "alinea-DashboardModalOverlay",
38
- "DashboardModal-surface": "alinea-DashboardModal-surface",
39
- "DashboardModalSurface": "alinea-DashboardModal-surface",
40
- "DashboardModalCloseButton": "alinea-DashboardModalCloseButton",
41
- "DashboardModalFooter": "alinea-DashboardModalFooter",
42
- "DashboardModal-enter": "alinea-DashboardModal-enter",
43
- "DashboardModalEnter": "alinea-DashboardModal-enter",
44
35
  "DashboardModalDialog-controls": "alinea-DashboardModalDialog-controls",
45
36
  "DashboardModalDialogControls": "alinea-DashboardModalDialog-controls",
37
+ "is-loading": "alinea-is-loading",
38
+ "isLoading": "alinea-is-loading",
39
+ "is-explorer": "alinea-is-explorer",
40
+ "isExplorer": "alinea-is-explorer",
41
+ "DashboardModal-enter": "alinea-DashboardModal-enter",
42
+ "DashboardModalEnter": "alinea-DashboardModal-enter",
43
+ "DashboardModalTitle": "alinea-DashboardModalTitle",
46
44
  "DashboardModalFormBody": "alinea-DashboardModalFormBody",
47
45
  "DashboardModalDialog-loader": "alinea-DashboardModalDialog-loader",
48
46
  "DashboardModalDialogLoader": "alinea-DashboardModalDialog-loader",
49
- "DashboardModalFormHeader": "alinea-DashboardModalFormHeader",
50
- "is-loading": "alinea-is-loading",
51
- "isLoading": "alinea-is-loading",
52
- "DashboardModalTitle": "alinea-DashboardModalTitle"
47
+ "DashboardModalSeparator": "alinea-DashboardModalSeparator",
48
+ "DashboardModal-surface": "alinea-DashboardModal-surface",
49
+ "DashboardModalSurface": "alinea-DashboardModal-surface",
50
+ "DashboardModalForm": "alinea-DashboardModalForm",
51
+ "DashboardModalCloseButton": "alinea-DashboardModalCloseButton",
52
+ "DashboardModalFormFooter": "alinea-DashboardModalFormFooter"
53
53
  };
54
54
 
55
55
  // src/dashboard/app/ui/DashboardModal.tsx
@@ -6,10 +6,10 @@ import "../../../chunks/chunk-CQ52GEHY.js";
6
6
  // src/dashboard/app/ui/Rail.module.css
7
7
  var Rail_default = {
8
8
  "RailFooter": "alinea-RailFooter",
9
+ "RailHeader": "alinea-RailHeader",
10
+ "RailBody": "alinea-RailBody",
9
11
  "is-main": "alinea-is-main",
10
12
  "isMain": "alinea-is-main",
11
- "RailBody": "alinea-RailBody",
12
- "RailHeader": "alinea-RailHeader",
13
13
  "Rail": "alinea-Rail",
14
14
  "RailContent": "alinea-RailContent"
15
15
  };
@@ -9,8 +9,8 @@ import { Rail, RailHeader } from "./Rail.js";
9
9
  // src/dashboard/app/ui/Sidebar.module.css
10
10
  var Sidebar_default = {
11
11
  "SidebarHeader": "alinea-SidebarHeader",
12
- "SidebarBody": "alinea-SidebarBody",
13
- "Sidebar": "alinea-Sidebar"
12
+ "Sidebar": "alinea-Sidebar",
13
+ "SidebarBody": "alinea-SidebarBody"
14
14
  };
15
15
 
16
16
  // src/dashboard/app/ui/Sidebar.tsx
@@ -9,9 +9,9 @@ import { useField, useFieldError, useFieldOptions } from "alinea/dashboard/hooks
9
9
 
10
10
  // src/field/check/CheckField.module.css
11
11
  var CheckField_default = {
12
- "checkline": "alinea-checkline",
13
12
  "checkline-required": "alinea-checkline-required",
14
- "checklineRequired": "alinea-checkline-required"
13
+ "checklineRequired": "alinea-checkline-required",
14
+ "checkline": "alinea-checkline"
15
15
  };
16
16
 
17
17
  // src/field/check/CheckField.view.tsx
@@ -64,27 +64,27 @@ import { Fragment, useId } from "react";
64
64
 
65
65
  // src/field/code/CodeField.module.css
66
66
  var CodeField_default = {
67
- "CodeEditorInput": "alinea-CodeEditorInput",
68
67
  "CodeEditorInput-pre": "alinea-CodeEditorInput-pre",
69
68
  "CodeEditorInputPre": "alinea-CodeEditorInput-pre",
70
- "CodeEditorInput-keyword": "alinea-CodeEditorInput-keyword",
71
- "CodeEditorInputKeyword": "alinea-CodeEditorInput-keyword",
69
+ "CodeEditorInput-textarea": "alinea-CodeEditorInput-textarea",
70
+ "CodeEditorInputTextarea": "alinea-CodeEditorInput-textarea",
71
+ "CodeEditorInput-identifier": "alinea-CodeEditorInput-identifier",
72
+ "CodeEditorInputIdentifier": "alinea-CodeEditorInput-identifier",
73
+ "CodeEditorInput-editor": "alinea-CodeEditorInput-editor",
74
+ "CodeEditorInputEditor": "alinea-CodeEditorInput-editor",
75
+ "CodeEditorInput-punctuation": "alinea-CodeEditorInput-punctuation",
76
+ "CodeEditorInputPunctuation": "alinea-CodeEditorInput-punctuation",
72
77
  "CodeEditorInput-string": "alinea-CodeEditorInput-string",
73
78
  "CodeEditorInputString": "alinea-CodeEditorInput-string",
79
+ "CodeEditorInput": "alinea-CodeEditorInput",
74
80
  "CodeEditorInput-number": "alinea-CodeEditorInput-number",
75
81
  "CodeEditorInputNumber": "alinea-CodeEditorInput-number",
76
- "CodeEditorInput-editor": "alinea-CodeEditorInput-editor",
77
- "CodeEditorInputEditor": "alinea-CodeEditorInput-editor",
78
82
  "CodeEditorInput-regex": "alinea-CodeEditorInput-regex",
79
83
  "CodeEditorInputRegex": "alinea-CodeEditorInput-regex",
80
- "CodeEditorInput-punctuation": "alinea-CodeEditorInput-punctuation",
81
- "CodeEditorInputPunctuation": "alinea-CodeEditorInput-punctuation",
82
84
  "CodeEditorInput-comment": "alinea-CodeEditorInput-comment",
83
85
  "CodeEditorInputComment": "alinea-CodeEditorInput-comment",
84
- "CodeEditorInput-identifier": "alinea-CodeEditorInput-identifier",
85
- "CodeEditorInputIdentifier": "alinea-CodeEditorInput-identifier",
86
- "CodeEditorInput-textarea": "alinea-CodeEditorInput-textarea",
87
- "CodeEditorInputTextarea": "alinea-CodeEditorInput-textarea"
86
+ "CodeEditorInput-keyword": "alinea-CodeEditorInput-keyword",
87
+ "CodeEditorInputKeyword": "alinea-CodeEditorInput-keyword"
88
88
  };
89
89
 
90
90
  // src/field/code/CodeField.view.tsx
@@ -30,7 +30,7 @@ export declare namespace entry {
30
30
  type EntryRow<Fields> = EntryLink<Type.Infer<Fields>> & ListRow;
31
31
  interface EntryOptions<Fields> extends LinkFieldOptions<Array<EntryReference & ListRow & InferStoredValue<Fields>>>, Omit<EntryPickerOptions<Fields>, 'label' | 'selection'> {
32
32
  }
33
- export function multiple<Fields = undefined>(label: Label, options?: WithoutLabel<EntryOptions<Fields>>): import("alinea/field/link/LinkField").LinksField<EntryReference & ListRow, EntryRow<Fields>>;
33
+ export function multiple<Fields = undefined>(label: Label, options?: WithoutLabel<EntryOptions<Fields>>): import("alinea/field/link/LinkField").LinksField<EntryReference & ListRow & InferStoredValue<Fields>, EntryRow<Fields>>;
34
34
  export {};
35
35
  }
36
36
  export {};
@@ -33,6 +33,7 @@ function entry(label, options = {}) {
33
33
  ((entry2) => {
34
34
  function multiple(label, options = {}) {
35
35
  return createLinks(label, {
36
+ allowDuplicates: false,
36
37
  ...options,
37
38
  isEntryField: true,
38
39
  pickers: {
@@ -27,6 +27,7 @@ function link(label, options = {}) {
27
27
  ((link2) => {
28
28
  function multiple(label, options = {}) {
29
29
  return createLinks(label, {
30
+ allowDuplicates: true,
30
31
  ...options,
31
32
  pickers: {
32
33
  entry: entryPicker({
@@ -8,6 +8,11 @@ import { ListRow } from 'alinea/core/ListRow';
8
8
  import type { ReactNode } from 'react';
9
9
  /** Optional settings to configure a link field */
10
10
  export interface LinkFieldOptions<Value> extends FieldOptions<Value> {
11
+ /**
12
+ * Allow the same entry to be linked more than once.
13
+ * Defaults to false for entry fields and true for generic link fields.
14
+ */
15
+ allowDuplicates?: boolean;
11
16
  /** Width of the field in the dashboard UI (0-1) */
12
17
  width?: number;
13
18
  /** Add instructional text to a field */
@@ -89,56 +89,56 @@ import { Fragment, useMemo, useRef, useState } from "react";
89
89
 
90
90
  // src/field/link/LinkField.module.css
91
91
  var LinkField_default = {
92
- "LinkFieldView-anchorOption-location": "alinea-LinkFieldView-anchorOption-location",
93
- "LinkFieldViewAnchorOptionLocation": "alinea-LinkFieldView-anchorOption-location",
94
92
  "is-loading": "alinea-is-loading",
95
93
  "isLoading": "alinea-is-loading",
96
- "LinkFieldView-inputHeader": "alinea-LinkFieldView-inputHeader",
97
- "LinkFieldViewInputHeader": "alinea-LinkFieldView-inputHeader",
98
- "LinkFieldView-labelText": "alinea-LinkFieldView-labelText",
99
- "LinkFieldViewLabelText": "alinea-LinkFieldView-labelText",
100
- "LinkFieldView-title": "alinea-LinkFieldView-title",
101
- "LinkFieldViewTitle": "alinea-LinkFieldView-title",
94
+ "LinkFieldView-metaLabel": "alinea-LinkFieldView-metaLabel",
95
+ "LinkFieldViewMetaLabel": "alinea-LinkFieldView-metaLabel",
96
+ "LinkFieldView-previewImage": "alinea-LinkFieldView-previewImage",
97
+ "LinkFieldViewPreviewImage": "alinea-LinkFieldView-previewImage",
102
98
  "LinkFieldView-anchorOption-label": "alinea-LinkFieldView-anchorOption-label",
103
99
  "LinkFieldViewAnchorOptionLabel": "alinea-LinkFieldView-anchorOption-label",
104
- "LinkFieldView-skeleton": "alinea-LinkFieldView-skeleton",
105
- "LinkFieldViewSkeleton": "alinea-LinkFieldView-skeleton",
100
+ "LinkFieldView-anchorOption-location": "alinea-LinkFieldView-anchorOption-location",
101
+ "LinkFieldViewAnchorOptionLocation": "alinea-LinkFieldView-anchorOption-location",
106
102
  "LinkFieldView-label": "alinea-LinkFieldView-label",
107
103
  "LinkFieldViewLabel": "alinea-LinkFieldView-label",
108
- "LinkFieldView-previewImage": "alinea-LinkFieldView-previewImage",
109
- "LinkFieldViewPreviewImage": "alinea-LinkFieldView-previewImage",
104
+ "is-missing": "alinea-is-missing",
105
+ "isMissing": "alinea-is-missing",
110
106
  "is-wide": "alinea-is-wide",
111
107
  "isWide": "alinea-is-wide",
108
+ "LinkFieldView-labelText": "alinea-LinkFieldView-labelText",
109
+ "LinkFieldViewLabelText": "alinea-LinkFieldView-labelText",
110
+ "LinkFieldView-imagePlaceholder": "alinea-LinkFieldView-imagePlaceholder",
111
+ "LinkFieldViewImagePlaceholder": "alinea-LinkFieldView-imagePlaceholder",
112
+ "LinkFieldView-icon": "alinea-LinkFieldView-icon",
113
+ "LinkFieldViewIcon": "alinea-LinkFieldView-icon",
114
+ "LinkFieldView-title": "alinea-LinkFieldView-title",
115
+ "LinkFieldViewTitle": "alinea-LinkFieldView-title",
116
+ "LinkFieldView-rowAction": "alinea-LinkFieldView-rowAction",
117
+ "LinkFieldViewRowAction": "alinea-LinkFieldView-rowAction",
118
+ "LinkFieldView-dropIndicator": "alinea-LinkFieldView-dropIndicator",
119
+ "LinkFieldViewDropIndicator": "alinea-LinkFieldView-dropIndicator",
112
120
  "LinkFieldView-create": "alinea-LinkFieldView-create",
113
121
  "LinkFieldViewCreate": "alinea-LinkFieldView-create",
114
- "LinkFieldView-createButton": "alinea-LinkFieldView-createButton",
115
- "LinkFieldViewCreateButton": "alinea-LinkFieldView-createButton",
122
+ "LinkFieldView-anchorOption": "alinea-LinkFieldView-anchorOption",
123
+ "LinkFieldViewAnchorOption": "alinea-LinkFieldView-anchorOption",
124
+ "LinkFieldView-rowDropTarget": "alinea-LinkFieldView-rowDropTarget",
125
+ "LinkFieldViewRowDropTarget": "alinea-LinkFieldView-rowDropTarget",
126
+ "LinkFieldView-meta": "alinea-LinkFieldView-meta",
127
+ "LinkFieldViewMeta": "alinea-LinkFieldView-meta",
116
128
  "LinkFieldView-type": "alinea-LinkFieldView-type",
117
129
  "LinkFieldViewType": "alinea-LinkFieldView-type",
118
- "LinkFieldView-dropIndicator": "alinea-LinkFieldView-dropIndicator",
119
- "LinkFieldViewDropIndicator": "alinea-LinkFieldView-dropIndicator",
120
- "is-missing": "alinea-is-missing",
121
- "isMissing": "alinea-is-missing",
122
130
  "LinkFieldView-image": "alinea-LinkFieldView-image",
123
131
  "LinkFieldViewImage": "alinea-LinkFieldView-image",
124
- "LinkFieldView-skeleton-pulse": "alinea-LinkFieldView-skeleton-pulse",
125
- "LinkFieldViewSkeletonPulse": "alinea-LinkFieldView-skeleton-pulse",
126
- "LinkFieldView-meta": "alinea-LinkFieldView-meta",
127
- "LinkFieldViewMeta": "alinea-LinkFieldView-meta",
132
+ "LinkFieldView-skeleton": "alinea-LinkFieldView-skeleton",
133
+ "LinkFieldViewSkeleton": "alinea-LinkFieldView-skeleton",
134
+ "LinkFieldView-createButton": "alinea-LinkFieldView-createButton",
135
+ "LinkFieldViewCreateButton": "alinea-LinkFieldView-createButton",
136
+ "LinkFieldView-inputHeader": "alinea-LinkFieldView-inputHeader",
137
+ "LinkFieldViewInputHeader": "alinea-LinkFieldView-inputHeader",
128
138
  "LinkFieldView-previewImagePlaceholder": "alinea-LinkFieldView-previewImagePlaceholder",
129
139
  "LinkFieldViewPreviewImagePlaceholder": "alinea-LinkFieldView-previewImagePlaceholder",
130
- "LinkFieldView-icon": "alinea-LinkFieldView-icon",
131
- "LinkFieldViewIcon": "alinea-LinkFieldView-icon",
132
- "LinkFieldView-imagePlaceholder": "alinea-LinkFieldView-imagePlaceholder",
133
- "LinkFieldViewImagePlaceholder": "alinea-LinkFieldView-imagePlaceholder",
134
- "LinkFieldView-anchorOption": "alinea-LinkFieldView-anchorOption",
135
- "LinkFieldViewAnchorOption": "alinea-LinkFieldView-anchorOption",
136
- "LinkFieldView-rowDropTarget": "alinea-LinkFieldView-rowDropTarget",
137
- "LinkFieldViewRowDropTarget": "alinea-LinkFieldView-rowDropTarget",
138
- "LinkFieldView-metaLabel": "alinea-LinkFieldView-metaLabel",
139
- "LinkFieldViewMetaLabel": "alinea-LinkFieldView-metaLabel",
140
- "LinkFieldView-rowAction": "alinea-LinkFieldView-rowAction",
141
- "LinkFieldViewRowAction": "alinea-LinkFieldView-rowAction"
140
+ "LinkFieldView-skeleton-pulse": "alinea-LinkFieldView-skeleton-pulse",
141
+ "LinkFieldViewSkeletonPulse": "alinea-LinkFieldView-skeleton-pulse"
142
142
  };
143
143
 
144
144
  // src/field/link/LinkField.view.tsx
@@ -337,6 +337,7 @@ function initialFields(picker) {
337
337
  return Type.initialValue(picker.fields);
338
338
  }
339
339
  function LinkPickerAction({
340
+ allowDuplicates = false,
340
341
  anchorRef,
341
342
  ariaLabel,
342
343
  buttonAppearance = "plain",
@@ -397,8 +398,10 @@ function LinkPickerAction({
397
398
  const location = childLocation ?? resolved.location ?? fallbackLocation;
398
399
  const condition = resolved.condition;
399
400
  const handlesMultiple = Boolean(onPickMany && picker.handlesMultiple);
401
+ const selectsMultiple = handlesMultiple && !allowDuplicates;
400
402
  const pickerProps = {
401
403
  condition,
404
+ enableNavigation: options.enableNavigation,
402
405
  initialView: type === "file" || type === "image" ? "card" : void 0,
403
406
  initialResultMode: entryPickerResultMode(
404
407
  type,
@@ -416,13 +419,14 @@ function LinkPickerAction({
416
419
  limitLocations: options.limitLocations,
417
420
  nestedNavigation: !pickingChildren,
418
421
  pickChildren: pickingChildren,
419
- preselect: false,
420
- selectionMode: handlesMultiple ? "multiple" : "single",
421
- selectionBehavior: handlesMultiple ? "toggle" : "replace",
422
+ preselect: selectsMultiple,
423
+ selectionMode: selectsMultiple ? "multiple" : "single",
424
+ selectionBehavior: selectsMultiple ? "toggle" : "replace",
422
425
  initialSelection: initialSelection(value, selection),
423
- onConfirm(selection2) {
424
- const links = selection2.map(
425
- (entryId) => createEntryLink(type, entryId, picker)
426
+ onConfirm(entryIds) {
427
+ const existing = allowDuplicates ? [] : selection;
428
+ const links = entryIds.map(
429
+ (entryId) => existing?.find((row) => "_entry" in row && row._entry === entryId) ?? createEntryLink(type, entryId, picker)
426
430
  );
427
431
  if (onPickMany) return onPickMany(links);
428
432
  const [link] = links;
@@ -517,6 +521,7 @@ function LinkPickerDialog({
517
521
  const handlesMultiple = Boolean(onPickMany && picker.handlesMultiple);
518
522
  const pickerProps = {
519
523
  condition,
524
+ enableNavigation: options.enableNavigation,
520
525
  initialView: type === "file" || type === "image" ? "card" : void 0,
521
526
  initialResultMode: entryPickerResultMode(
522
527
  type,
@@ -683,13 +688,25 @@ function MultipleLinkCreateActions({ field }) {
683
688
  return /* @__PURE__ */ jsx("div", { className: styles.LinkFieldView.create(), ref: anchorRef, children: Object.entries(options.pickers).map(([type, picker]) => /* @__PURE__ */ jsxs(
684
689
  LinkPickerAction,
685
690
  {
691
+ allowDuplicates: options.allowDuplicates,
686
692
  anchorRef,
687
693
  buttonSize: "small",
688
694
  className: styles.LinkFieldView.createButton(),
689
695
  onPick: (link) => {
690
696
  setValue((links2) => [...links2 ?? [], link]);
691
697
  },
692
- onPickMany: (picked) => setValue((links2) => [...links2 ?? [], ...picked]),
698
+ onPickMany: (picked) => setValue((value2) => {
699
+ const current = value2 ?? [];
700
+ if (options.allowDuplicates) return [...current, ...picked];
701
+ const pickedIds = new Set(picked.map((row) => row._id));
702
+ const currentIds = new Set(current.map((row) => row._id));
703
+ return [
704
+ ...current.filter(
705
+ (row) => row._type !== type || pickedIds.has(row._id)
706
+ ),
707
+ ...picked.filter((row) => !currentIds.has(row._id))
708
+ ];
709
+ }),
693
710
  picker,
694
711
  selection: links.filter((row) => row._type === type),
695
712
  type,
@@ -94,29 +94,29 @@ import {
94
94
 
95
95
  // src/field/list/ListField.module.css
96
96
  var ListField_default = {
97
- "ListFieldTypePicker-item": "alinea-ListFieldTypePicker-item",
98
- "ListFieldTypePickerItem": "alinea-ListFieldTypePicker-item",
99
- "ListFieldView-insertAction": "alinea-ListFieldView-insertAction",
100
- "ListFieldViewInsertAction": "alinea-ListFieldView-insertAction",
101
- "ListFieldTypePicker-list": "alinea-ListFieldTypePicker-list",
102
- "ListFieldTypePickerList": "alinea-ListFieldTypePicker-list",
103
- "ListFieldView-dropIndicator": "alinea-ListFieldView-dropIndicator",
104
- "ListFieldViewDropIndicator": "alinea-ListFieldView-dropIndicator",
105
97
  "ListFieldCreateActions-button": "alinea-ListFieldCreateActions-button",
106
98
  "ListFieldCreateActionsButton": "alinea-ListFieldCreateActions-button",
107
- "ListFieldView-rowDropTarget": "alinea-ListFieldView-rowDropTarget",
108
- "ListFieldViewRowDropTarget": "alinea-ListFieldView-rowDropTarget",
109
- "ListFieldTypePicker-empty": "alinea-ListFieldTypePicker-empty",
110
- "ListFieldTypePickerEmpty": "alinea-ListFieldTypePicker-empty",
99
+ "ListFieldTypePicker-search": "alinea-ListFieldTypePicker-search",
100
+ "ListFieldTypePickerSearch": "alinea-ListFieldTypePicker-search",
101
+ "ListFieldView-insertAction": "alinea-ListFieldView-insertAction",
102
+ "ListFieldViewInsertAction": "alinea-ListFieldView-insertAction",
111
103
  "ListFieldTypePicker-popover": "alinea-ListFieldTypePicker-popover",
112
104
  "ListFieldTypePickerPopover": "alinea-ListFieldTypePicker-popover",
113
105
  "ListFieldTypePicker-trigger": "alinea-ListFieldTypePicker-trigger",
114
106
  "ListFieldTypePickerTrigger": "alinea-ListFieldTypePicker-trigger",
115
107
  "ListFieldCreateActions": "alinea-ListFieldCreateActions",
108
+ "ListFieldTypePicker-empty": "alinea-ListFieldTypePicker-empty",
109
+ "ListFieldTypePickerEmpty": "alinea-ListFieldTypePicker-empty",
116
110
  "ListFieldTypePicker-dialog": "alinea-ListFieldTypePicker-dialog",
117
111
  "ListFieldTypePickerDialog": "alinea-ListFieldTypePicker-dialog",
118
- "ListFieldTypePicker-search": "alinea-ListFieldTypePicker-search",
119
- "ListFieldTypePickerSearch": "alinea-ListFieldTypePicker-search"
112
+ "ListFieldView-dropIndicator": "alinea-ListFieldView-dropIndicator",
113
+ "ListFieldViewDropIndicator": "alinea-ListFieldView-dropIndicator",
114
+ "ListFieldTypePicker-list": "alinea-ListFieldTypePicker-list",
115
+ "ListFieldTypePickerList": "alinea-ListFieldTypePicker-list",
116
+ "ListFieldTypePicker-item": "alinea-ListFieldTypePicker-item",
117
+ "ListFieldTypePickerItem": "alinea-ListFieldTypePicker-item",
118
+ "ListFieldView-rowDropTarget": "alinea-ListFieldView-rowDropTarget",
119
+ "ListFieldViewRowDropTarget": "alinea-ListFieldView-rowDropTarget"
120
120
  };
121
121
 
122
122
  // src/field/list/ListField.view.tsx
@@ -50,6 +50,8 @@ export declare class MetadataField extends RecordField<Metadata, {
50
50
  fields: Type<MetadataFields>;
51
51
  }> {
52
52
  }
53
+ export interface MetadataField extends MetadataFields {
54
+ }
53
55
  export declare class MetadataTimestampField extends ScalarField<number | null, MetadataTimestampOptions> {
54
56
  }
55
57
  export declare class MetadataUserField extends ScalarField<MetadataAuditUser, MetadataUserOptions> {
@@ -51,7 +51,7 @@ function metadata(label = "Metadata") {
51
51
  updatedBy: user("Updated by")
52
52
  }
53
53
  });
54
- return new MetadataField(fields, {
54
+ const result = new MetadataField(fields, {
55
55
  options: {
56
56
  label,
57
57
  fields
@@ -73,6 +73,7 @@ function metadata(label = "Metadata") {
73
73
  );
74
74
  }
75
75
  });
76
+ return Object.assign(result, fields);
76
77
  }
77
78
  function timestamp(label) {
78
79
  return new MetadataTimestampField({
@@ -17,34 +17,34 @@ import { IcRoundPublic } from "alinea/dashboard/icons";
17
17
 
18
18
  // src/field/metadata/MetadataField.module.css
19
19
  var MetadataField_default = {
20
- "OpenGraphPreview-site": "alinea-OpenGraphPreview-site",
21
- "OpenGraphPreviewSite": "alinea-OpenGraphPreview-site",
22
- "SearchEnginePreview-description": "alinea-SearchEnginePreview-description",
23
- "SearchEnginePreviewDescription": "alinea-SearchEnginePreview-description",
24
20
  "SearchEnginePreview-og-label-small": "alinea-SearchEnginePreview-og-label-small",
25
21
  "SearchEnginePreviewOgLabelSmall": "alinea-SearchEnginePreview-og-label-small",
26
- "OpenGraphPreview": "alinea-OpenGraphPreview",
27
- "SearchEnginePreview-og-label": "alinea-SearchEnginePreview-og-label",
28
- "SearchEnginePreviewOgLabel": "alinea-SearchEnginePreview-og-label",
29
22
  "MetadataUserFieldView-person": "alinea-MetadataUserFieldView-person",
30
23
  "MetadataUserFieldViewPerson": "alinea-MetadataUserFieldView-person",
31
- "OpenGraphPreview-description": "alinea-OpenGraphPreview-description",
32
- "OpenGraphPreviewDescription": "alinea-OpenGraphPreview-description",
33
- "OpenGraphPreview-content": "alinea-OpenGraphPreview-content",
34
- "OpenGraphPreviewContent": "alinea-OpenGraphPreview-content",
35
- "OpenGraphPreview-image": "alinea-OpenGraphPreview-image",
36
- "OpenGraphPreviewImage": "alinea-OpenGraphPreview-image",
37
- "MetadataUserFieldView-contact": "alinea-MetadataUserFieldView-contact",
38
- "MetadataUserFieldViewContact": "alinea-MetadataUserFieldView-contact",
39
- "MetadataUserFieldView": "alinea-MetadataUserFieldView",
40
- "OpenGraphPreview-title": "alinea-OpenGraphPreview-title",
41
- "OpenGraphPreviewTitle": "alinea-OpenGraphPreview-title",
24
+ "SearchEnginePreview-og-label": "alinea-SearchEnginePreview-og-label",
25
+ "SearchEnginePreviewOgLabel": "alinea-SearchEnginePreview-og-label",
42
26
  "SearchEnginePreview-link": "alinea-SearchEnginePreview-link",
43
27
  "SearchEnginePreviewLink": "alinea-SearchEnginePreview-link",
28
+ "OpenGraphPreview": "alinea-OpenGraphPreview",
29
+ "MetadataUserFieldView-contact": "alinea-MetadataUserFieldView-contact",
30
+ "MetadataUserFieldViewContact": "alinea-MetadataUserFieldView-contact",
44
31
  "SearchEnginePreview": "alinea-SearchEnginePreview",
45
32
  "SearchEnginePreview-og": "alinea-SearchEnginePreview-og",
46
33
  "SearchEnginePreviewOg": "alinea-SearchEnginePreview-og",
47
- "MetadataTimestampFieldView": "alinea-MetadataTimestampFieldView"
34
+ "OpenGraphPreview-title": "alinea-OpenGraphPreview-title",
35
+ "OpenGraphPreviewTitle": "alinea-OpenGraphPreview-title",
36
+ "MetadataUserFieldView": "alinea-MetadataUserFieldView",
37
+ "OpenGraphPreview-image": "alinea-OpenGraphPreview-image",
38
+ "OpenGraphPreviewImage": "alinea-OpenGraphPreview-image",
39
+ "SearchEnginePreview-description": "alinea-SearchEnginePreview-description",
40
+ "SearchEnginePreviewDescription": "alinea-SearchEnginePreview-description",
41
+ "MetadataTimestampFieldView": "alinea-MetadataTimestampFieldView",
42
+ "OpenGraphPreview-content": "alinea-OpenGraphPreview-content",
43
+ "OpenGraphPreviewContent": "alinea-OpenGraphPreview-content",
44
+ "OpenGraphPreview-description": "alinea-OpenGraphPreview-description",
45
+ "OpenGraphPreviewDescription": "alinea-OpenGraphPreview-description",
46
+ "OpenGraphPreview-site": "alinea-OpenGraphPreview-site",
47
+ "OpenGraphPreviewSite": "alinea-OpenGraphPreview-site"
48
48
  };
49
49
 
50
50
  // src/field/metadata/MetadataField.view.tsx
@@ -37,9 +37,9 @@ import { memo, useMemo, useState } from "react";
37
37
 
38
38
  // src/field/richtext/RichTextBlock.module.css
39
39
  var RichTextBlock_default = {
40
+ "RichTextBlock": "alinea-RichTextBlock",
40
41
  "RichTextBlock-dragHandle": "alinea-RichTextBlock-dragHandle",
41
- "RichTextBlockDragHandle": "alinea-RichTextBlock-dragHandle",
42
- "RichTextBlock": "alinea-RichTextBlock"
42
+ "RichTextBlockDragHandle": "alinea-RichTextBlock-dragHandle"
43
43
  };
44
44
 
45
45
  // src/field/richtext/RichTextBlock.tsx