alinea 2.0.0-preview.6 → 2.0.0-preview.7

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 (96) hide show
  1. package/dist/.init/content/pages/welcome.json +1 -1
  2. package/dist/LICENSES.md +64 -64
  3. package/dist/adapter/next/previews.js +0 -2
  4. package/dist/bundled.d.ts +16 -5
  5. package/dist/chunks/{chunk-7IOKMUKO.js → chunk-6P4UVRPH.js} +1 -1
  6. package/dist/cli/Serve.js +1 -1
  7. package/dist/cli/bin.js +1 -1
  8. package/dist/cloud/CloudRemote.js +1 -1
  9. package/dist/components/Calendar.js +7 -7
  10. package/dist/components/Checkbox.js +3 -3
  11. package/dist/components/ColorSwatchPicker.js +2 -2
  12. package/dist/components/ComboBox.js +13 -13
  13. package/dist/components/DateField.js +3 -3
  14. package/dist/components/DatePicker.js +2 -2
  15. package/dist/components/DateRangePicker.js +7 -7
  16. package/dist/components/Disclosure.js +8 -8
  17. package/dist/components/Label.js +5 -5
  18. package/dist/components/List.js +52 -50
  19. package/dist/components/Menu.js +3 -3
  20. package/dist/components/Modal.js +2 -2
  21. package/dist/components/MultipleSelect.js +23 -23
  22. package/dist/components/NumberField.js +3 -3
  23. package/dist/components/ProgressCircle.js +4 -4
  24. package/dist/components/SearchField.js +9 -9
  25. package/dist/components/Select.js +8 -8
  26. package/dist/components/Surface.js +2 -2
  27. package/dist/components/Table.js +3 -3
  28. package/dist/components/Tabs.js +3 -3
  29. package/dist/components/TagGroup.js +3 -3
  30. package/dist/components/TextField.js +6 -6
  31. package/dist/components/TimeField.js +3 -3
  32. package/dist/components/Toolbar.js +2 -2
  33. package/dist/components/Tooltip.js +1 -1
  34. package/dist/components/Tree.js +6 -6
  35. package/dist/core/TextDoc.d.ts +1 -0
  36. package/dist/core/field/RichTextField.js +3 -3
  37. package/dist/dashboard/App.js +4 -2
  38. package/dist/dashboard/app/AccessDenied.js +4 -4
  39. package/dist/dashboard/app/ActivityStatus.js +14 -14
  40. package/dist/dashboard/app/AuthView.js +13 -13
  41. package/dist/dashboard/app/Badge.js +2 -2
  42. package/dist/dashboard/app/CompactField.js +9 -9
  43. package/dist/dashboard/app/DashboardErrorBoundary.js +6 -6
  44. package/dist/dashboard/app/DashboardLayout.js +6 -5
  45. package/dist/dashboard/app/EntryFields.js +2 -2
  46. package/dist/dashboard/app/EntryHeader.js +10 -10
  47. package/dist/dashboard/app/EntryReferences.js +8 -13
  48. package/dist/dashboard/app/EntrySidebar.js +27 -13
  49. package/dist/dashboard/app/EntrySidebarPreview.js +12 -12
  50. package/dist/dashboard/app/EntryTranslationBanner.js +5 -5
  51. package/dist/dashboard/app/Explorer.js +44 -44
  52. package/dist/dashboard/app/ExplorerCards.js +31 -31
  53. package/dist/dashboard/app/ExplorerFileCard.js +17 -17
  54. package/dist/dashboard/app/ExplorerList.js +12 -12
  55. package/dist/dashboard/app/ExplorerModal.js +4 -4
  56. package/dist/dashboard/app/ExplorerTable.js +44 -44
  57. package/dist/dashboard/app/LinkPicker.js +5 -5
  58. package/dist/dashboard/app/LocaleMenu.js +4 -4
  59. package/dist/dashboard/app/SidebarTree.js +40 -40
  60. package/dist/dashboard/app/WorkspaceMenu.js +14 -14
  61. package/dist/dashboard/app/WorkspaceRoots.js +22 -22
  62. package/dist/dashboard/app/editor/FileEditor.js +26 -26
  63. package/dist/dashboard/app/editor/FilePreview.js +5 -5
  64. package/dist/dashboard/app/modals/CreateEntry.js +5 -5
  65. package/dist/dashboard/app/pages/EntryPage.js +20 -20
  66. package/dist/dashboard/app/pages/SplashPage.js +45 -45
  67. package/dist/dashboard/app/pages/UsersPage.js +34 -34
  68. package/dist/dashboard/app/ui/DashboardModal.js +19 -19
  69. package/dist/dashboard/app/ui/Rail.js +3 -3
  70. package/dist/dashboard/app/ui/Sidebar.js +2 -2
  71. package/dist/dashboard/atoms/dashboard.js +2 -1
  72. package/dist/dashboard/atoms/editor.js +7 -0
  73. package/dist/dashboard/atoms/entry.d.ts +2 -4
  74. package/dist/dashboard/atoms/entry.js +8 -3
  75. package/dist/dashboard/atoms/root.d.ts +1 -0
  76. package/dist/dashboard/atoms/root.js +61 -35
  77. package/dist/dashboard/boot/Boot.js +7 -5
  78. package/dist/field/check/CheckField.view.js +2 -2
  79. package/dist/field/code/CodeField.view.js +12 -12
  80. package/dist/field/link/FileLink.js +1 -7
  81. package/dist/field/link/LinkField.view.js +35 -35
  82. package/dist/field/list/ListField.d.ts +5 -0
  83. package/dist/field/list/ListField.stories.d.ts +1 -0
  84. package/dist/field/list/ListField.view.js +59 -47
  85. package/dist/field/metadata/MetadataField.view.js +18 -18
  86. package/dist/field/richtext/PickTextLink.d.ts +3 -1
  87. package/dist/field/richtext/PickTextLink.js +7 -6
  88. package/dist/field/richtext/RichTextBlock.js +2 -2
  89. package/dist/field/richtext/RichTextDocument.js +8 -1
  90. package/dist/field/richtext/RichTextExtensions.js +23 -23
  91. package/dist/field/richtext/RichTextField.d.ts +3 -0
  92. package/dist/field/richtext/RichTextField.view.js +5 -5
  93. package/dist/field/richtext/RichTextInsertMenu.js +3 -3
  94. package/dist/index.css +17 -6
  95. package/dist/ui/RichText.js +33 -18
  96. package/package.json +1 -1
@@ -59,33 +59,33 @@ import { Rail, RailBody, RailContent } from "./../ui/Rail.js";
59
59
 
60
60
  // src/dashboard/app/pages/EntryPage.module.css
61
61
  var EntryPage_default = {
62
- "EntryEditor-title": "alinea-EntryEditor-title",
63
- "EntryEditorTitle": "alinea-EntryEditor-title",
64
- "EntryOverview-mobileActions": "alinea-EntryOverview-mobileActions",
65
- "EntryOverviewMobileActions": "alinea-EntryOverview-mobileActions",
66
- "EntryEditor-fields": "alinea-EntryEditor-fields",
67
- "EntryEditorFields": "alinea-EntryEditor-fields",
68
- "MissingEntry-card": "alinea-MissingEntry-card",
69
- "MissingEntryCard": "alinea-MissingEntry-card",
70
- "MissingEntry-icon": "alinea-MissingEntry-icon",
71
- "MissingEntryIcon": "alinea-MissingEntry-icon",
62
+ "MissingEntry-id": "alinea-MissingEntry-id",
63
+ "MissingEntryId": "alinea-MissingEntry-id",
64
+ "EntryEditor-toolbar": "alinea-EntryEditor-toolbar",
65
+ "EntryEditorToolbar": "alinea-EntryEditor-toolbar",
66
+ "MissingEntry-message": "alinea-MissingEntry-message",
67
+ "MissingEntryMessage": "alinea-MissingEntry-message",
72
68
  "EntryEditor-header": "alinea-EntryEditor-header",
73
69
  "EntryEditorHeader": "alinea-EntryEditor-header",
74
- "EntryEditorContent-navigationActions": "alinea-EntryEditorContent-navigationActions",
75
- "EntryEditorContentNavigationActions": "alinea-EntryEditorContent-navigationActions",
76
70
  "EntryEditor-body": "alinea-EntryEditor-body",
77
71
  "EntryEditorBody": "alinea-EntryEditor-body",
78
72
  "MissingEntry": "alinea-MissingEntry",
79
- "MissingEntry-title": "alinea-MissingEntry-title",
80
- "MissingEntryTitle": "alinea-MissingEntry-title",
81
- "MissingEntry-id": "alinea-MissingEntry-id",
82
- "MissingEntryId": "alinea-MissingEntry-id",
73
+ "MissingEntry-card": "alinea-MissingEntry-card",
74
+ "MissingEntryCard": "alinea-MissingEntry-card",
75
+ "EntryEditor-fields": "alinea-EntryEditor-fields",
76
+ "EntryEditorFields": "alinea-EntryEditor-fields",
77
+ "MissingEntry-icon": "alinea-MissingEntry-icon",
78
+ "MissingEntryIcon": "alinea-MissingEntry-icon",
83
79
  "EntryEditor-banner": "alinea-EntryEditor-banner",
84
80
  "EntryEditorBanner": "alinea-EntryEditor-banner",
85
- "MissingEntry-message": "alinea-MissingEntry-message",
86
- "MissingEntryMessage": "alinea-MissingEntry-message",
87
- "EntryEditor-toolbar": "alinea-EntryEditor-toolbar",
88
- "EntryEditorToolbar": "alinea-EntryEditor-toolbar"
81
+ "EntryEditor-title": "alinea-EntryEditor-title",
82
+ "EntryEditorTitle": "alinea-EntryEditor-title",
83
+ "EntryEditorContent-navigationActions": "alinea-EntryEditorContent-navigationActions",
84
+ "EntryEditorContentNavigationActions": "alinea-EntryEditorContent-navigationActions",
85
+ "EntryOverview-mobileActions": "alinea-EntryOverview-mobileActions",
86
+ "EntryOverviewMobileActions": "alinea-EntryOverview-mobileActions",
87
+ "MissingEntry-title": "alinea-MissingEntry-title",
88
+ "MissingEntryTitle": "alinea-MissingEntry-title"
89
89
  };
90
90
 
91
91
  // src/dashboard/app/pages/EntryPage.tsx
@@ -30,67 +30,67 @@ import { GlobalSearch, WorkspaceAvatar } from "../WorkspaceMenu.js";
30
30
 
31
31
  // src/dashboard/app/pages/SplashPage.module.css
32
32
  var SplashPage_default = {
33
- "SplashPage-entry-visual-icon": "alinea-SplashPage-entry-visual-icon",
34
- "SplashPageEntryVisualIcon": "alinea-SplashPage-entry-visual-icon",
35
- "SplashPage-entry-title": "alinea-SplashPage-entry-title",
36
- "SplashPageEntryTitle": "alinea-SplashPage-entry-title",
37
- "SplashPage-search-label": "alinea-SplashPage-search-label",
38
- "SplashPageSearchLabel": "alinea-SplashPage-search-label",
39
33
  "SplashPage-card-header-button": "alinea-SplashPage-card-header-button",
40
34
  "SplashPageCardHeaderButton": "alinea-SplashPage-card-header-button",
41
- "SplashPage-sidebar": "alinea-SplashPage-sidebar",
42
- "SplashPageSidebar": "alinea-SplashPage-sidebar",
43
- "SplashPage-entry-time": "alinea-SplashPage-entry-time",
44
- "SplashPageEntryTime": "alinea-SplashPage-entry-time",
45
- "SplashPage-action": "alinea-SplashPage-action",
46
- "SplashPageAction": "alinea-SplashPage-action",
47
- "SplashPage-user-label": "alinea-SplashPage-user-label",
48
- "SplashPageUserLabel": "alinea-SplashPage-user-label",
49
- "SplashPage-root-menuIcon": "alinea-SplashPage-root-menuIcon",
50
- "SplashPageRootMenuIcon": "alinea-SplashPage-root-menuIcon",
51
- "SplashPage-actionIcon": "alinea-SplashPage-actionIcon",
52
- "SplashPageActionIcon": "alinea-SplashPage-actionIcon",
53
- "SplashPage-card-footer": "alinea-SplashPage-card-footer",
54
- "SplashPageCardFooter": "alinea-SplashPage-card-footer",
55
35
  "SplashPage-entry-meta": "alinea-SplashPage-entry-meta",
56
36
  "SplashPageEntryMeta": "alinea-SplashPage-entry-meta",
57
- "SplashPage-entry-user": "alinea-SplashPage-entry-user",
58
- "SplashPageEntryUser": "alinea-SplashPage-entry-user",
59
- "SplashPage-appearance-label": "alinea-SplashPage-appearance-label",
60
- "SplashPageAppearanceLabel": "alinea-SplashPage-appearance-label",
61
- "SplashPage-card": "alinea-SplashPage-card",
62
- "SplashPageCard": "alinea-SplashPage-card",
63
- "SplashPage-card-header-title": "alinea-SplashPage-card-header-title",
64
- "SplashPageCardHeaderTitle": "alinea-SplashPage-card-header-title",
65
37
  "SplashPage-card-header-label": "alinea-SplashPage-card-header-label",
66
38
  "SplashPageCardHeaderLabel": "alinea-SplashPage-card-header-label",
67
- "SplashPage-grid": "alinea-SplashPage-grid",
68
- "SplashPageGrid": "alinea-SplashPage-grid",
69
39
  "SplashPage-entry": "alinea-SplashPage-entry",
70
40
  "SplashPageEntry": "alinea-SplashPage-entry",
71
- "SplashPage-appearance": "alinea-SplashPage-appearance",
72
- "SplashPageAppearance": "alinea-SplashPage-appearance",
73
- "SplashPage-entries": "alinea-SplashPage-entries",
74
- "SplashPageEntries": "alinea-SplashPage-entries",
75
- "SplashPage-root": "alinea-SplashPage-root",
76
- "SplashPageRoot": "alinea-SplashPage-root",
77
- "SplashPage-entry-visual": "alinea-SplashPage-entry-visual",
78
- "SplashPageEntryVisual": "alinea-SplashPage-entry-visual",
41
+ "SplashPage-entry-title": "alinea-SplashPage-entry-title",
42
+ "SplashPageEntryTitle": "alinea-SplashPage-entry-title",
43
+ "SplashPage-user-label": "alinea-SplashPage-user-label",
44
+ "SplashPageUserLabel": "alinea-SplashPage-user-label",
45
+ "SplashPage-actionIcon": "alinea-SplashPage-actionIcon",
46
+ "SplashPageActionIcon": "alinea-SplashPage-actionIcon",
79
47
  "SplashPage-user": "alinea-SplashPage-user",
80
48
  "SplashPageUser": "alinea-SplashPage-user",
81
- "SplashPage-card-header-content": "alinea-SplashPage-card-header-content",
82
- "SplashPageCardHeaderContent": "alinea-SplashPage-card-header-content",
83
49
  "SplashPage-entry-content": "alinea-SplashPage-entry-content",
84
50
  "SplashPageEntryContent": "alinea-SplashPage-entry-content",
85
- "SplashPage-sidebar-content": "alinea-SplashPage-sidebar-content",
86
- "SplashPageSidebarContent": "alinea-SplashPage-sidebar-content",
87
51
  "SplashPage-entry-primary": "alinea-SplashPage-entry-primary",
88
52
  "SplashPageEntryPrimary": "alinea-SplashPage-entry-primary",
89
- "SplashPage": "alinea-SplashPage",
53
+ "SplashPage-appearance": "alinea-SplashPage-appearance",
54
+ "SplashPageAppearance": "alinea-SplashPage-appearance",
55
+ "SplashPage-sidebar-content": "alinea-SplashPage-sidebar-content",
56
+ "SplashPageSidebarContent": "alinea-SplashPage-sidebar-content",
57
+ "SplashPage-card-footer": "alinea-SplashPage-card-footer",
58
+ "SplashPageCardFooter": "alinea-SplashPage-card-footer",
59
+ "SplashPage-content": "alinea-SplashPage-content",
60
+ "SplashPageContent": "alinea-SplashPage-content",
61
+ "SplashPage-card": "alinea-SplashPage-card",
62
+ "SplashPageCard": "alinea-SplashPage-card",
63
+ "SplashPage-card-header-content": "alinea-SplashPage-card-header-content",
64
+ "SplashPageCardHeaderContent": "alinea-SplashPage-card-header-content",
65
+ "SplashPage-entry-time": "alinea-SplashPage-entry-time",
66
+ "SplashPageEntryTime": "alinea-SplashPage-entry-time",
67
+ "SplashPage-entry-visual": "alinea-SplashPage-entry-visual",
68
+ "SplashPageEntryVisual": "alinea-SplashPage-entry-visual",
69
+ "SplashPage-root-menuIcon": "alinea-SplashPage-root-menuIcon",
70
+ "SplashPageRootMenuIcon": "alinea-SplashPage-root-menuIcon",
71
+ "SplashPage-appearance-label": "alinea-SplashPage-appearance-label",
72
+ "SplashPageAppearanceLabel": "alinea-SplashPage-appearance-label",
73
+ "SplashPage-entry-user": "alinea-SplashPage-entry-user",
74
+ "SplashPageEntryUser": "alinea-SplashPage-entry-user",
75
+ "SplashPage-action": "alinea-SplashPage-action",
76
+ "SplashPageAction": "alinea-SplashPage-action",
77
+ "SplashPage-entries": "alinea-SplashPage-entries",
78
+ "SplashPageEntries": "alinea-SplashPage-entries",
79
+ "SplashPage-sidebar": "alinea-SplashPage-sidebar",
80
+ "SplashPageSidebar": "alinea-SplashPage-sidebar",
81
+ "SplashPage-search-label": "alinea-SplashPage-search-label",
82
+ "SplashPageSearchLabel": "alinea-SplashPage-search-label",
83
+ "SplashPage-entry-visual-icon": "alinea-SplashPage-entry-visual-icon",
84
+ "SplashPageEntryVisualIcon": "alinea-SplashPage-entry-visual-icon",
85
+ "SplashPage-card-header-title": "alinea-SplashPage-card-header-title",
86
+ "SplashPageCardHeaderTitle": "alinea-SplashPage-card-header-title",
87
+ "SplashPage-root": "alinea-SplashPage-root",
88
+ "SplashPageRoot": "alinea-SplashPage-root",
89
+ "SplashPage-grid": "alinea-SplashPage-grid",
90
+ "SplashPageGrid": "alinea-SplashPage-grid",
90
91
  "SplashPage-card-header": "alinea-SplashPage-card-header",
91
92
  "SplashPageCardHeader": "alinea-SplashPage-card-header",
92
- "SplashPage-content": "alinea-SplashPage-content",
93
- "SplashPageContent": "alinea-SplashPage-content"
93
+ "SplashPage": "alinea-SplashPage"
94
94
  };
95
95
 
96
96
  // src/dashboard/app/pages/SplashPage.tsx
@@ -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-content": "alinea-UsersPage-content",
60
- "UsersPageContent": "alinea-UsersPage-content",
59
+ "UsersPage-identity-email": "alinea-UsersPage-identity-email",
60
+ "UsersPageIdentityEmail": "alinea-UsersPage-identity-email",
61
+ "UsersPage-status": "alinea-UsersPage-status",
62
+ "UsersPageStatus": "alinea-UsersPage-status",
61
63
  "UsersPage-status-text": "alinea-UsersPage-status-text",
62
64
  "UsersPageStatusText": "alinea-UsersPage-status-text",
63
- "UsersPage-rolesCell": "alinea-UsersPage-rolesCell",
64
- "UsersPageRolesCell": "alinea-UsersPage-rolesCell",
65
- "UsersPage-search": "alinea-UsersPage-search",
66
- "UsersPageSearch": "alinea-UsersPage-search",
67
- "UsersPageSidebar-icon": "alinea-UsersPageSidebar-icon",
68
- "UsersPageSidebarIcon": "alinea-UsersPageSidebar-icon",
65
+ "UsersPage-form-fields": "alinea-UsersPage-form-fields",
66
+ "UsersPageFormFields": "alinea-UsersPage-form-fields",
69
67
  "UsersPage-header": "alinea-UsersPage-header",
70
68
  "UsersPageHeader": "alinea-UsersPage-header",
71
- "UsersPage-table": "alinea-UsersPage-table",
72
- "UsersPageTable": "alinea-UsersPage-table",
73
69
  "UsersPageSidebar-footer": "alinea-UsersPageSidebar-footer",
74
70
  "UsersPageSidebarFooter": "alinea-UsersPageSidebar-footer",
75
- "UsersPage-roles": "alinea-UsersPage-roles",
76
- "UsersPageRoles": "alinea-UsersPage-roles",
71
+ "UsersPage-table": "alinea-UsersPage-table",
72
+ "UsersPageTable": "alinea-UsersPage-table",
73
+ "UsersPage-empty": "alinea-UsersPage-empty",
74
+ "UsersPageEmpty": "alinea-UsersPage-empty",
75
+ "UsersPage-search": "alinea-UsersPage-search",
76
+ "UsersPageSearch": "alinea-UsersPage-search",
77
+ "UsersPage-identity-text": "alinea-UsersPage-identity-text",
78
+ "UsersPageIdentityText": "alinea-UsersPage-identity-text",
77
79
  "UsersPage-form-error": "alinea-UsersPage-form-error",
78
80
  "UsersPageFormError": "alinea-UsersPage-form-error",
79
- "UsersPage-identity-email": "alinea-UsersPage-identity-email",
80
- "UsersPageIdentityEmail": "alinea-UsersPage-identity-email",
81
- "UsersPage-status": "alinea-UsersPage-status",
82
- "UsersPageStatus": "alinea-UsersPage-status",
83
- "UsersPage": "alinea-UsersPage",
84
- "UsersPageSidebar-item": "alinea-UsersPageSidebar-item",
85
- "UsersPageSidebarItem": "alinea-UsersPageSidebar-item",
86
- "UsersPage-header-title": "alinea-UsersPage-header-title",
87
- "UsersPageHeaderTitle": "alinea-UsersPage-header-title",
81
+ "UsersPageSidebar-icon": "alinea-UsersPageSidebar-icon",
82
+ "UsersPageSidebarIcon": "alinea-UsersPageSidebar-icon",
83
+ "UsersPage-noRoles": "alinea-UsersPage-noRoles",
84
+ "UsersPageNoRoles": "alinea-UsersPage-noRoles",
85
+ "UsersPage-confirmation": "alinea-UsersPage-confirmation",
86
+ "UsersPageConfirmation": "alinea-UsersPage-confirmation",
87
+ "UsersPageSidebar": "alinea-UsersPageSidebar",
88
88
  "UsersPage-createButton": "alinea-UsersPage-createButton",
89
89
  "UsersPageCreateButton": "alinea-UsersPage-createButton",
90
+ "UsersPageSidebar-item": "alinea-UsersPageSidebar-item",
91
+ "UsersPageSidebarItem": "alinea-UsersPageSidebar-item",
92
+ "UsersPage": "alinea-UsersPage",
93
+ "UsersPage-content": "alinea-UsersPage-content",
94
+ "UsersPageContent": "alinea-UsersPage-content",
90
95
  "UsersPage-identity": "alinea-UsersPage-identity",
91
96
  "UsersPageIdentity": "alinea-UsersPage-identity",
92
- "UsersPage-identity-text": "alinea-UsersPage-identity-text",
93
- "UsersPageIdentityText": "alinea-UsersPage-identity-text",
94
- "UsersPageSidebar": "alinea-UsersPageSidebar",
95
- "UsersPage-form-fields": "alinea-UsersPage-form-fields",
96
- "UsersPageFormFields": "alinea-UsersPage-form-fields",
97
- "UsersPageSidebar-nav": "alinea-UsersPageSidebar-nav",
98
- "UsersPageSidebarNav": "alinea-UsersPageSidebar-nav",
99
- "UsersPage-confirmation": "alinea-UsersPage-confirmation",
100
- "UsersPageConfirmation": "alinea-UsersPage-confirmation",
101
- "UsersPage-empty": "alinea-UsersPage-empty",
102
- "UsersPageEmpty": "alinea-UsersPage-empty",
103
97
  "UsersPage-identity-title": "alinea-UsersPage-identity-title",
104
98
  "UsersPageIdentityTitle": "alinea-UsersPage-identity-title",
105
- "UsersPage-noRoles": "alinea-UsersPage-noRoles",
106
- "UsersPageNoRoles": "alinea-UsersPage-noRoles"
99
+ "UsersPage-rolesCell": "alinea-UsersPage-rolesCell",
100
+ "UsersPageRolesCell": "alinea-UsersPage-rolesCell",
101
+ "UsersPage-roles": "alinea-UsersPage-roles",
102
+ "UsersPageRoles": "alinea-UsersPage-roles",
103
+ "UsersPage-header-title": "alinea-UsersPage-header-title",
104
+ "UsersPageHeaderTitle": "alinea-UsersPage-header-title",
105
+ "UsersPageSidebar-nav": "alinea-UsersPageSidebar-nav",
106
+ "UsersPageSidebarNav": "alinea-UsersPageSidebar-nav"
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
- "DashboardModalFormFooter": "alinea-DashboardModalFormFooter",
28
- "DashboardModalFooter": "alinea-DashboardModalFooter",
29
- "DashboardModal": "alinea-DashboardModal",
30
- "DashboardModalDialog-loader": "alinea-DashboardModalDialog-loader",
31
- "DashboardModalDialogLoader": "alinea-DashboardModalDialog-loader",
27
+ "DashboardModalDialog-header": "alinea-DashboardModalDialog-header",
28
+ "DashboardModalDialogHeader": "alinea-DashboardModalDialog-header",
32
29
  "DashboardModal-surface": "alinea-DashboardModal-surface",
33
30
  "DashboardModalSurface": "alinea-DashboardModal-surface",
31
+ "DashboardModalDialog-loader": "alinea-DashboardModalDialog-loader",
32
+ "DashboardModalDialogLoader": "alinea-DashboardModalDialog-loader",
33
+ "DashboardModalForm": "alinea-DashboardModalForm",
34
+ "DashboardModalFormBody": "alinea-DashboardModalFormBody",
35
+ "DashboardModalFooter": "alinea-DashboardModalFooter",
36
+ "DashboardModalSeparator": "alinea-DashboardModalSeparator",
37
+ "DashboardModal-enter": "alinea-DashboardModal-enter",
38
+ "DashboardModalEnter": "alinea-DashboardModal-enter",
39
+ "DashboardModalDialog-controls": "alinea-DashboardModalDialog-controls",
40
+ "DashboardModalDialogControls": "alinea-DashboardModalDialog-controls",
34
41
  "is-loading": "alinea-is-loading",
35
42
  "isLoading": "alinea-is-loading",
36
- "DashboardModalFormHeader": "alinea-DashboardModalFormHeader",
43
+ "is-explorer": "alinea-is-explorer",
44
+ "isExplorer": "alinea-is-explorer",
45
+ "DashboardModalContent": "alinea-DashboardModalContent",
37
46
  "DashboardModalOverlay": "alinea-DashboardModalOverlay",
47
+ "DashboardModalFormHeader": "alinea-DashboardModalFormHeader",
48
+ "DashboardModalFormFooter": "alinea-DashboardModalFormFooter",
49
+ "DashboardModalCloseButton": "alinea-DashboardModalCloseButton",
38
50
  "DashboardModalTitle": "alinea-DashboardModalTitle",
39
51
  "DashboardModalDialog": "alinea-DashboardModalDialog",
40
- "DashboardModalContent": "alinea-DashboardModalContent",
41
- "DashboardModalDialog-controls": "alinea-DashboardModalDialog-controls",
42
- "DashboardModalDialogControls": "alinea-DashboardModalDialog-controls",
43
- "DashboardModalCloseButton": "alinea-DashboardModalCloseButton",
44
- "DashboardModalFormBody": "alinea-DashboardModalFormBody",
45
- "DashboardModalSeparator": "alinea-DashboardModalSeparator",
46
- "is-explorer": "alinea-is-explorer",
47
- "isExplorer": "alinea-is-explorer",
48
- "DashboardModal-enter": "alinea-DashboardModal-enter",
49
- "DashboardModalEnter": "alinea-DashboardModal-enter",
50
- "DashboardModalForm": "alinea-DashboardModalForm",
51
- "DashboardModalDialog-header": "alinea-DashboardModalDialog-header",
52
- "DashboardModalDialogHeader": "alinea-DashboardModalDialog-header"
52
+ "DashboardModal": "alinea-DashboardModal"
53
53
  };
54
54
 
55
55
  // src/dashboard/app/ui/DashboardModal.tsx
@@ -5,13 +5,13 @@ import "../../../chunks/chunk-CQ52GEHY.js";
5
5
 
6
6
  // src/dashboard/app/ui/Rail.module.css
7
7
  var Rail_default = {
8
+ "Rail": "alinea-Rail",
8
9
  "is-main": "alinea-is-main",
9
10
  "isMain": "alinea-is-main",
10
- "Rail": "alinea-Rail",
11
+ "RailHeader": "alinea-RailHeader",
11
12
  "RailBody": "alinea-RailBody",
12
- "RailContent": "alinea-RailContent",
13
13
  "RailFooter": "alinea-RailFooter",
14
- "RailHeader": "alinea-RailHeader"
14
+ "RailContent": "alinea-RailContent"
15
15
  };
16
16
 
17
17
  // src/dashboard/app/ui/Rail.tsx
@@ -8,9 +8,9 @@ import { Rail, RailHeader } from "./Rail.js";
8
8
 
9
9
  // src/dashboard/app/ui/Sidebar.module.css
10
10
  var Sidebar_default = {
11
- "Sidebar": "alinea-Sidebar",
11
+ "SidebarHeader": "alinea-SidebarHeader",
12
12
  "SidebarBody": "alinea-SidebarBody",
13
- "SidebarHeader": "alinea-SidebarHeader"
13
+ "Sidebar": "alinea-Sidebar"
14
14
  };
15
15
 
16
16
  // src/dashboard/app/ui/Sidebar.tsx
@@ -13,7 +13,8 @@ var dashboardThemeStorageKey = "alinea-dashboard-theme";
13
13
  var themeStorageAtom = atomWithStorage(
14
14
  dashboardThemeStorageKey,
15
15
  "system",
16
- void 0
16
+ void 0,
17
+ { getOnInit: true }
17
18
  );
18
19
  var mobileMediaQuery = "(max-width: 768px)";
19
20
  var dashboardMobileAtom = atom(
@@ -110,6 +110,13 @@ var EntryEditorField = class {
110
110
  error = atom((get) => {
111
111
  const options = get(this.options);
112
112
  const value = get(this.value);
113
+ const { min, max } = options;
114
+ if (Array.isArray(value)) {
115
+ if (typeof min === "number" && value.length < min)
116
+ return `Add at least ${min} ${min === 1 ? "item" : "items"}`;
117
+ if (typeof max === "number" && value.length > max)
118
+ return `Add at most ${max} ${max === 1 ? "item" : "items"}`;
119
+ }
113
120
  if (options.validate) {
114
121
  const result = options.validate(value);
115
122
  if (typeof result === "boolean")
@@ -69,7 +69,7 @@ export declare class EntryLocaleAtoms {
69
69
  preferredEntry: Atom<Entry<Record<string, unknown>>>;
70
70
  selectedEntry: Atom<Promise<Entry<Record<string, unknown>>>>;
71
71
  historyReady: Atom<Promise<import("../../core/Connection.js").Revision[]>>;
72
- history: Atom<import("../../core/Connection.js").Revision[]>;
72
+ historyState: Atom<readonly [false, import("../../core/Connection.js").Revision[]] | readonly [true, import("../../core/Connection.js").Revision[] | undefined]>;
73
73
  selectedNode: Atom<Promise<ReactiveNode<object>>>;
74
74
  richTextImages: Atom<Promise<Map<string, ResolvedEditorImage>>>;
75
75
  anchors: Atom<Promise<import("alinea/core/Field").EntryAnchorTarget[]>>;
@@ -168,9 +168,7 @@ export declare class EntryAtoms {
168
168
  readonly id: string;
169
169
  readonly data: Atom<EntryData>;
170
170
  constructor(id: string, data: Atom<EntryData>);
171
- previousVersionsOpen: import("jotai").PrimitiveAtom<boolean> & {
172
- init: boolean;
173
- };
171
+ previousVersionsOpen: import("jotai").WritableAtom<boolean, [open: boolean], void>;
174
172
  incomingReferencesReady: Atom<Promise<{
175
173
  references: {
176
174
  reference: EntryReference;
@@ -25,7 +25,7 @@ import { entries } from "alinea/core/util/Objects";
25
25
  import { join } from "alinea/core/util/Paths";
26
26
  import { encodePreviewPayload } from "alinea/preview/PreviewPayload";
27
27
  import { parents, translations } from "alinea/query";
28
- import { clientAtom, configAtom, graphAtom } from "./core.js";
28
+ import { clientAtom, configAtom, graphAtom, localAtom } from "./core.js";
29
29
  import { entryRevisionAtom, shaAtom } from "./graph.js";
30
30
  import { getPreviewToken, retryPreviewToken } from "./preview.js";
31
31
  import { ReactiveNode } from "./ReactiveNode.js";
@@ -162,7 +162,7 @@ var EntryLocaleAtoms = class {
162
162
  const file = join(Config.contentDir(config), entry.filePath);
163
163
  return (await client.revisions(file)).slice(1);
164
164
  });
165
- history = unwrap(this.historyReady, (previous) => previous ?? []);
165
+ historyState = atomWithPending(this.historyReady);
166
166
  selectedNode = atom(async (get) => {
167
167
  const version = get(this.selectedVersion);
168
168
  const entry = await get(this.selectedEntry);
@@ -498,7 +498,12 @@ var EntryAtoms = class {
498
498
  data;
499
499
  // Should UI show overview or editor?
500
500
  #selectedView = atom();
501
- previousVersionsOpen = atom(false);
501
+ #previousVersionsRequested = atom();
502
+ // Local history is cheap to load, so expand it unless toggled explicitly
503
+ previousVersionsOpen = atom(
504
+ (get) => get(this.#previousVersionsRequested) ?? get(localAtom),
505
+ (_get, set, open) => set(this.#previousVersionsRequested, open)
506
+ );
502
507
  incomingReferencesReady = atom(async (get) => {
503
508
  get(entryRevisionAtom(this.id));
504
509
  const graph = get(graphAtom);
@@ -54,6 +54,7 @@ export declare class TreeAtoms {
54
54
  children: (id: string) => Atom<Promise<TreeEntryAtoms[]>>;
55
55
  item: (id: string) => Atom<RootTreeItem>;
56
56
  selectedItem: Atom<RootTreeItem | undefined>;
57
+ canCreate: Atom<boolean>;
57
58
  ready: Atom<Promise<{
58
59
  expandedKeys: Set<string>;
59
60
  items: RootTreeNode[];
@@ -40,22 +40,6 @@ var emptyTreeView = {
40
40
  entries: /* @__PURE__ */ new Map(),
41
41
  snapshot: emptyTreeSnapshot
42
42
  };
43
- function rootTreeItem(config, entry, parentType) {
44
- return {
45
- id: entry.id,
46
- title: entry.title,
47
- type: entry.type,
48
- status: entry.status,
49
- main: entry.main,
50
- locale: entry.locale,
51
- parentId: entry.parentId,
52
- parents: entry.parents,
53
- hasChildren: entry.hasChildren,
54
- dragDisabled: Boolean(
55
- parentType && getType(config.schema[parentType]).orderChildrenBy
56
- )
57
- };
58
- }
59
43
  var TreeAtoms = class {
60
44
  expandedKeys;
61
45
  collapsedKeys;
@@ -194,6 +178,27 @@ var TreeAtoms = class {
194
178
  const selectedId = state && [...state.snapshot.selectedKeys][0];
195
179
  return selectedId ? state.entries.get(selectedId) : void 0;
196
180
  });
181
+ canCreate = atom((get) => {
182
+ if (get(this.#root.canCreate)) return true;
183
+ const state = get(this.#state);
184
+ const selected = get(this.selectedItem);
185
+ if (!state || !selected) return false;
186
+ const config = get(configAtom);
187
+ const selectedType = config.schema[selected.type];
188
+ const parent = selectedType && Type.isContainer(selectedType) ? selected : selected.parentId ? state.entries.get(selected.parentId) : void 0;
189
+ const parentType = parent && config.schema[parent.type];
190
+ if (!parent || !parentType) return false;
191
+ return containsCreatableType(
192
+ get,
193
+ {
194
+ workspace: this.#root.workspace,
195
+ root: this.#root.key,
196
+ locale: this.#locale,
197
+ parents: [parent.id, ...parent.parents]
198
+ },
199
+ Type.contains(parentType)
200
+ );
201
+ });
197
202
  ready = atom(async (get) => {
198
203
  get(this.snapshot);
199
204
  const source = await get(this.#source);
@@ -308,25 +313,13 @@ var RootAtoms = class {
308
313
  return data.isMediaRoot ? void 0 : data.i18n;
309
314
  });
310
315
  isMedia = atom((get) => Boolean(get(this.data).isMediaRoot));
311
- canCreate = atom((get) => {
312
- const policy = get(policyAtom);
313
- const resource = { workspace: this.workspace, root: this.key };
314
- const config = get(configAtom);
315
- const rootData = get(this.data);
316
- const seen = /* @__PURE__ */ new Set();
317
- const queue = Schema.contained(config.schema, rootData.contains ?? []);
318
- while (queue.length > 0) {
319
- const typeName = queue.shift();
320
- if (seen.has(typeName)) continue;
321
- seen.add(typeName);
322
- const type = config.schema[typeName];
323
- if (!type || Type.isHidden(type)) continue;
324
- if (policy.canCreate({ ...resource, type: typeName })) return true;
325
- if (Type.isContainer(type))
326
- queue.push(...Schema.contained(config.schema, Type.contains(type)));
327
- }
328
- return false;
329
- });
316
+ canCreate = atom(
317
+ (get) => containsCreatableType(
318
+ get,
319
+ { workspace: this.workspace, root: this.key },
320
+ get(this.data).contains ?? []
321
+ )
322
+ );
330
323
  view = atom((get) => {
331
324
  const view = get(this.data).view;
332
325
  if (!view) return void 0;
@@ -411,6 +404,39 @@ var RootAtoms = class {
411
404
  var rootAtoms = dispense(
412
405
  (workspace, root) => new RootAtoms(workspace, root)
413
406
  );
407
+ function rootTreeItem(config, entry, parentType) {
408
+ return {
409
+ id: entry.id,
410
+ title: entry.title,
411
+ type: entry.type,
412
+ status: entry.status,
413
+ main: entry.main,
414
+ locale: entry.locale,
415
+ parentId: entry.parentId,
416
+ parents: entry.parents,
417
+ hasChildren: entry.hasChildren,
418
+ dragDisabled: Boolean(
419
+ parentType && getType(config.schema[parentType]).orderChildrenBy
420
+ )
421
+ };
422
+ }
423
+ function containsCreatableType(get, resource, contains) {
424
+ const policy = get(policyAtom);
425
+ const config = get(configAtom);
426
+ const seen = /* @__PURE__ */ new Set();
427
+ const queue = Schema.contained(config.schema, contains);
428
+ while (queue.length > 0) {
429
+ const typeName = queue.shift();
430
+ if (seen.has(typeName)) continue;
431
+ seen.add(typeName);
432
+ const type = config.schema[typeName];
433
+ if (!type || Type.isHidden(type)) continue;
434
+ if (policy.canCreate({ ...resource, type: typeName })) return true;
435
+ if (Type.isContainer(type))
436
+ queue.push(...Schema.contained(config.schema, Type.contains(type)));
437
+ }
438
+ return false;
439
+ }
414
440
  export {
415
441
  RootAtoms,
416
442
  TreeAtoms,
@@ -39,12 +39,14 @@ async function boot(gen) {
39
39
  for await (const batch of gen) {
40
40
  if (batch.local && batch.revision !== lastRevision) {
41
41
  const link = document.querySelector(
42
- 'link[href="config.css"]'
42
+ 'link[rel="stylesheet"][href^="config.css"]'
43
43
  );
44
- const copy = link.cloneNode();
45
- copy.href = `config.css?${batch.revision}`;
46
- copy.onload = () => link.remove();
47
- link.after(copy);
44
+ if (link) {
45
+ const copy = link.cloneNode();
46
+ copy.href = `config.css?${batch.revision}`;
47
+ copy.onload = () => link.remove();
48
+ link.after(copy);
49
+ }
48
50
  }
49
51
  const isLocal = worker instanceof DashboardWorker;
50
52
  if (isLocal) await worker.load(batch.revision, batch.config, batch.client);
@@ -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-punctuation": "alinea-CodeEditorInput-punctuation",
68
- "CodeEditorInputPunctuation": "alinea-CodeEditorInput-punctuation",
69
- "CodeEditorInput-editor": "alinea-CodeEditorInput-editor",
70
- "CodeEditorInputEditor": "alinea-CodeEditorInput-editor",
71
- "CodeEditorInput-identifier": "alinea-CodeEditorInput-identifier",
72
- "CodeEditorInputIdentifier": "alinea-CodeEditorInput-identifier",
73
- "CodeEditorInput-textarea": "alinea-CodeEditorInput-textarea",
74
- "CodeEditorInputTextarea": "alinea-CodeEditorInput-textarea",
75
67
  "CodeEditorInput-comment": "alinea-CodeEditorInput-comment",
76
68
  "CodeEditorInputComment": "alinea-CodeEditorInput-comment",
77
- "CodeEditorInput": "alinea-CodeEditorInput",
78
- "CodeEditorInput-string": "alinea-CodeEditorInput-string",
79
- "CodeEditorInputString": "alinea-CodeEditorInput-string",
69
+ "CodeEditorInput-punctuation": "alinea-CodeEditorInput-punctuation",
70
+ "CodeEditorInputPunctuation": "alinea-CodeEditorInput-punctuation",
80
71
  "CodeEditorInput-regex": "alinea-CodeEditorInput-regex",
81
72
  "CodeEditorInputRegex": "alinea-CodeEditorInput-regex",
73
+ "CodeEditorInput-editor": "alinea-CodeEditorInput-editor",
74
+ "CodeEditorInputEditor": "alinea-CodeEditorInput-editor",
82
75
  "CodeEditorInput-keyword": "alinea-CodeEditorInput-keyword",
83
76
  "CodeEditorInputKeyword": "alinea-CodeEditorInput-keyword",
84
77
  "CodeEditorInput-pre": "alinea-CodeEditorInput-pre",
85
78
  "CodeEditorInputPre": "alinea-CodeEditorInput-pre",
86
79
  "CodeEditorInput-number": "alinea-CodeEditorInput-number",
87
- "CodeEditorInputNumber": "alinea-CodeEditorInput-number"
80
+ "CodeEditorInputNumber": "alinea-CodeEditorInput-number",
81
+ "CodeEditorInput-identifier": "alinea-CodeEditorInput-identifier",
82
+ "CodeEditorInputIdentifier": "alinea-CodeEditorInput-identifier",
83
+ "CodeEditorInput": "alinea-CodeEditorInput",
84
+ "CodeEditorInput-textarea": "alinea-CodeEditorInput-textarea",
85
+ "CodeEditorInputTextarea": "alinea-CodeEditorInput-textarea",
86
+ "CodeEditorInput-string": "alinea-CodeEditorInput-string",
87
+ "CodeEditorInputString": "alinea-CodeEditorInput-string"
88
88
  };
89
89
 
90
90
  // src/field/code/CodeField.view.tsx