alinea 2.0.0-preview.3 → 2.0.0-preview.5

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 (225) hide show
  1. package/dist/.init/content/pages/welcome.json +1 -1
  2. package/dist/.init/src/cms.ts +1 -4
  3. package/dist/LICENSES.md +148 -94
  4. package/dist/adapter/next/DevRemote.js +10 -2
  5. package/dist/adapter/next/cms.js +5 -1
  6. package/dist/adapter/next/handler.js +35 -6
  7. package/dist/adapter/next/previews.js +7 -0
  8. package/dist/adapter/next/syncCheck.d.ts +12 -0
  9. package/dist/adapter/next/syncCheck.js +59 -0
  10. package/dist/adapter/next/with-alinea.d.ts +0 -8
  11. package/dist/adapter/next/with-alinea.js +43 -19
  12. package/dist/adapter/vite/plugin.js +9 -4
  13. package/dist/backend/Handler.js +120 -7
  14. package/dist/backend/api/BasicAuth.d.ts +1 -1
  15. package/dist/backend/api/BasicAuth.js +14 -14
  16. package/dist/backend/api/OAuth2.d.ts +3 -3
  17. package/dist/backend/api/OAuth2.js +7 -4
  18. package/dist/backend/api/ProxyMedia.d.ts +3 -0
  19. package/dist/backend/api/ProxyMedia.js +39 -0
  20. package/dist/backend/api/S3Uploads.d.ts +1 -1
  21. package/dist/backend/router/Router.js +2 -0
  22. package/dist/backend/util/Syncable.js +1 -1
  23. package/dist/bundled.d.ts +260 -95
  24. package/dist/chunks/{chunk-HFBZMKIN.js → chunk-A6M3PNJT.js} +1 -1
  25. package/dist/chunks/{chunk-Y7XOMJOC.js → chunk-CFNRVI3Y.js} +220 -247
  26. package/dist/chunks/chunk-D6UJHBJJ.js +183 -0
  27. package/dist/chunks/chunk-TIJTT5ZI.js +228 -0
  28. package/dist/cli/Generate.js +1 -3
  29. package/dist/cli/Serve.js +3 -2
  30. package/dist/cli/bin.js +1 -1
  31. package/dist/cli/generate/GenerateDashboard.js +1 -0
  32. package/dist/cli/serve/CreateLocalServer.d.ts +1 -1
  33. package/dist/cli/serve/CreateLocalServer.js +42 -34
  34. package/dist/cli/serve/LocalAuth.js +1 -1
  35. package/dist/cli/static/init/cms.js +1 -4
  36. package/dist/cli/util/ContentType.d.ts +1 -0
  37. package/dist/cli/util/ContentType.js +36 -0
  38. package/dist/cloud/AuthResult.d.ts +2 -0
  39. package/dist/cloud/CloudHandshake.d.ts +13 -0
  40. package/dist/cloud/CloudHandshake.js +121 -0
  41. package/dist/cloud/CloudRemote.d.ts +4 -1
  42. package/dist/cloud/CloudRemote.js +40 -9
  43. package/dist/components/Calendar.js +7 -7
  44. package/dist/components/Checkbox.js +2 -2
  45. package/dist/components/ColorSwatchPicker.js +2 -2
  46. package/dist/components/ComboBox.js +12 -12
  47. package/dist/components/DateField.js +4 -4
  48. package/dist/components/DatePicker.js +4 -4
  49. package/dist/components/DateRangePicker.js +8 -8
  50. package/dist/components/Disclosure.js +7 -7
  51. package/dist/components/Label.js +5 -5
  52. package/dist/components/List.d.ts +1 -1
  53. package/dist/components/List.js +29 -28
  54. package/dist/components/Menu.js +2 -2
  55. package/dist/components/MultipleSelect.js +25 -25
  56. package/dist/components/NumberField.js +3 -3
  57. package/dist/components/ProgressCircle.js +4 -4
  58. package/dist/components/SearchField.js +6 -6
  59. package/dist/components/Select.js +7 -7
  60. package/dist/components/Surface.js +3 -3
  61. package/dist/components/Table.js +6 -6
  62. package/dist/components/Tabs.js +2 -2
  63. package/dist/components/TagGroup.js +2 -2
  64. package/dist/components/TextField.js +4 -4
  65. package/dist/components/TimeField.js +1 -1
  66. package/dist/components/Toggle.d.ts +1 -1
  67. package/dist/components/Toolbar.js +1 -1
  68. package/dist/components/Tree.js +7 -7
  69. package/dist/core/Config.d.ts +10 -3
  70. package/dist/core/Config.js +16 -1
  71. package/dist/core/Connection.d.ts +7 -4
  72. package/dist/core/Entry.d.ts +6 -0
  73. package/dist/core/Entry.js +10 -0
  74. package/dist/core/Graph.d.ts +2 -2
  75. package/dist/core/Id.d.ts +1 -0
  76. package/dist/core/Id.js +8 -0
  77. package/dist/core/Role.js +16 -14
  78. package/dist/core/TextDoc.d.ts +2 -0
  79. package/dist/core/TextDoc.js +1 -0
  80. package/dist/core/Workspace.d.ts +6 -5
  81. package/dist/core/db/EntryIndex.d.ts +3 -0
  82. package/dist/core/db/EntryIndex.js +62 -0
  83. package/dist/core/db/EntryTransaction.js +33 -12
  84. package/dist/core/db/EntryUrlConflictError.js +1 -1
  85. package/dist/core/db/LinkResolver.d.ts +8 -2
  86. package/dist/core/db/LinkResolver.js +27 -5
  87. package/dist/core/db/Operation.js +4 -3
  88. package/dist/core/field/RichTextField.js +16 -10
  89. package/dist/core/media/MediaLocation.d.ts +9 -15
  90. package/dist/core/media/MediaLocation.js +29 -19
  91. package/dist/core/media/MediaTypes.js +1 -2
  92. package/dist/dashboard/App.js +30 -16
  93. package/dist/dashboard/StoryProvider.js +2 -2
  94. package/dist/dashboard/app/AccessDenied.js +4 -4
  95. package/dist/dashboard/app/ActivityStatus.js +22 -21
  96. package/dist/dashboard/app/AppShell.js +2 -2
  97. package/dist/dashboard/app/AppearanceToggle.d.ts +1 -0
  98. package/dist/dashboard/app/AppearanceToggle.js +43 -0
  99. package/dist/dashboard/app/AuthView.d.ts +1 -1
  100. package/dist/dashboard/app/AuthView.js +19 -21
  101. package/dist/dashboard/app/CompactField.js +13 -13
  102. package/dist/dashboard/app/DashboardErrorBoundary.js +26 -14
  103. package/dist/dashboard/app/DashboardLayout.js +15 -8
  104. package/dist/dashboard/app/DashboardMeta.d.ts +2 -1
  105. package/dist/dashboard/app/DashboardMeta.js +20 -5
  106. package/dist/dashboard/app/EntryFields.d.ts +3 -1
  107. package/dist/dashboard/app/EntryFields.js +17 -14
  108. package/dist/dashboard/app/EntryHeader.js +134 -102
  109. package/dist/dashboard/app/EntryHeaderActions.d.ts +21 -4
  110. package/dist/dashboard/app/EntryHeaderActions.js +48 -27
  111. package/dist/dashboard/app/EntryReferences.js +16 -16
  112. package/dist/dashboard/app/EntrySidebar.js +24 -24
  113. package/dist/dashboard/app/EntrySidebarPreview.js +16 -15
  114. package/dist/dashboard/app/EntryTranslationBanner.d.ts +3 -1
  115. package/dist/dashboard/app/EntryTranslationBanner.js +24 -21
  116. package/dist/dashboard/app/Explorer.d.ts +4 -2
  117. package/dist/dashboard/app/Explorer.js +70 -66
  118. package/dist/dashboard/app/ExplorerCards.js +49 -49
  119. package/dist/dashboard/app/ExplorerFileCard.js +18 -18
  120. package/dist/dashboard/app/ExplorerList.js +21 -22
  121. package/dist/dashboard/app/ExplorerModal.js +1 -1
  122. package/dist/dashboard/app/ExplorerPickerContent.js +2 -2
  123. package/dist/dashboard/app/ExplorerTable.js +68 -68
  124. package/dist/dashboard/app/ImagePicker.js +7 -7
  125. package/dist/dashboard/app/LinkPicker.js +17 -22
  126. package/dist/dashboard/app/LocaleMenu.d.ts +7 -0
  127. package/dist/dashboard/app/LocaleMenu.js +31 -17
  128. package/dist/dashboard/app/ReadOnlyBadge.d.ts +4 -0
  129. package/dist/dashboard/app/ReadOnlyBadge.js +33 -0
  130. package/dist/dashboard/app/SidebarLayout.js +4 -4
  131. package/dist/dashboard/app/SidebarTree.d.ts +3 -6
  132. package/dist/dashboard/app/SidebarTree.js +66 -61
  133. package/dist/dashboard/app/WorkspaceMenu.d.ts +10 -3
  134. package/dist/dashboard/app/WorkspaceMenu.js +87 -66
  135. package/dist/dashboard/app/WorkspaceMenu.stories.d.ts +2 -0
  136. package/dist/dashboard/app/WorkspaceRoots.d.ts +3 -1
  137. package/dist/dashboard/app/WorkspaceRoots.js +88 -113
  138. package/dist/dashboard/app/editor/FileEditor.d.ts +2 -3
  139. package/dist/dashboard/app/editor/FileEditor.js +35 -38
  140. package/dist/dashboard/app/editor/FilePreview.js +3 -3
  141. package/dist/dashboard/app/editor/MediaAltField.view.js +4 -4
  142. package/dist/dashboard/app/modals/CreateEntry.js +10 -10
  143. package/dist/dashboard/app/pages/EntryPage.js +85 -44
  144. package/dist/dashboard/app/pages/RootPage.js +4 -4
  145. package/dist/dashboard/app/pages/SplashPage.d.ts +3 -0
  146. package/dist/dashboard/app/pages/SplashPage.js +414 -0
  147. package/dist/dashboard/app/pages/UsersPage.js +38 -38
  148. package/dist/dashboard/app/ui/DashboardModal.js +16 -16
  149. package/dist/dashboard/app/ui/Rail.js +2 -2
  150. package/dist/dashboard/app/ui/Sidebar.js +2 -2
  151. package/dist/dashboard/atoms/ReactiveNode.js +1 -1
  152. package/dist/dashboard/atoms/activity.d.ts +0 -1
  153. package/dist/dashboard/atoms/activity.js +3 -5
  154. package/dist/dashboard/atoms/auth.d.ts +2 -0
  155. package/dist/dashboard/atoms/auth.js +6 -2
  156. package/dist/dashboard/atoms/config.js +1 -1
  157. package/dist/dashboard/atoms/core.js +2 -2
  158. package/dist/dashboard/atoms/create.js +1 -1
  159. package/dist/dashboard/atoms/dashboard.js +2 -2
  160. package/dist/dashboard/atoms/editor.d.ts +2 -1
  161. package/dist/dashboard/atoms/editor.js +5 -3
  162. package/dist/dashboard/atoms/entry.d.ts +2 -0
  163. package/dist/dashboard/atoms/entry.js +34 -16
  164. package/dist/dashboard/atoms/explorer.d.ts +5 -6
  165. package/dist/dashboard/atoms/explorer.js +68 -31
  166. package/dist/dashboard/atoms/graph.d.ts +1 -0
  167. package/dist/dashboard/atoms/graph.js +7 -2
  168. package/dist/dashboard/atoms/link.d.ts +1 -1
  169. package/dist/dashboard/atoms/link.js +41 -57
  170. package/dist/dashboard/atoms/nav.d.ts +4 -3
  171. package/dist/dashboard/atoms/nav.js +10 -5
  172. package/dist/dashboard/atoms/preview.js +1 -1
  173. package/dist/dashboard/atoms/root.d.ts +7 -2
  174. package/dist/dashboard/atoms/root.js +53 -18
  175. package/dist/dashboard/atoms/upload.d.ts +1 -0
  176. package/dist/dashboard/atoms/upload.js +3 -2
  177. package/dist/dashboard/atoms/user.d.ts +1 -1
  178. package/dist/dashboard/atoms/user.js +8 -6
  179. package/dist/dashboard/atoms/utils.js +2 -2
  180. package/dist/dashboard/boot/Boot.js +2 -4
  181. package/dist/dashboard/boot/DashboardWorker.js +35 -29
  182. package/dist/dashboard/editor/UseField.js +6 -6
  183. package/dist/dashboard/fixture/cms.d.ts +12 -0
  184. package/dist/dashboard/fixture/cms.js +54 -6
  185. package/dist/dashboard/hook/UseGraph.js +4 -4
  186. package/dist/dashboard/hook/UseRoot.js +4 -4
  187. package/dist/dashboard/hook/UseSaveShortcut.d.ts +1 -0
  188. package/dist/dashboard/hook/UseSaveShortcut.js +24 -0
  189. package/dist/dashboard/hooks.d.ts +1 -1
  190. package/dist/dashboard/hooks.js +28 -19
  191. package/dist/field/code/CodeField.view.js +12 -12
  192. package/dist/field/link/ImageLink.js +1 -3
  193. package/dist/field/link/LinkField.view.js +97 -71
  194. package/dist/field/list/ListField.view.js +23 -23
  195. package/dist/field/localiser/LocalisedField.view.js +76 -5
  196. package/dist/field/metadata/MetadataField.d.ts +3 -3
  197. package/dist/field/metadata/MetadataField.view.js +27 -20
  198. package/dist/field/object/ObjectField.view.js +11 -4
  199. package/dist/field/richtext/PickTextLink.js +11 -8
  200. package/dist/field/richtext/ReferenceLink.d.ts +2 -0
  201. package/dist/field/richtext/ReferenceLink.js +5 -0
  202. package/dist/field/richtext/RichTextBlock.js +6 -6
  203. package/dist/field/richtext/RichTextBlocks.js +1 -1
  204. package/dist/field/richtext/RichTextExtensions.js +22 -22
  205. package/dist/field/richtext/RichTextField.view.js +9 -9
  206. package/dist/field/richtext/RichTextInsertMenu.js +3 -3
  207. package/dist/field/richtext/RichTextState.js +1 -1
  208. package/dist/field/richtext/extensions/Link.d.ts +1 -0
  209. package/dist/field/richtext/extensions/Link.js +1 -0
  210. package/dist/field/text/TextField.view.js +2 -2
  211. package/dist/field/time/TimeField.d.ts +0 -2
  212. package/dist/field/time/TimeField.view.js +1 -1
  213. package/dist/index.css +459 -66
  214. package/dist/next.cjs +96 -19
  215. package/dist/picker/entry/EntryPicker.js +10 -12
  216. package/dist/picker/entry/EntryReference.d.ts +2 -0
  217. package/dist/picker/entry/EntryReference.js +1 -0
  218. package/dist/preview/RegisterPreview.d.ts +1 -1
  219. package/dist/preview/RegisterPreview.js +4 -6
  220. package/dist/preview/react.d.ts +5 -1
  221. package/dist/preview/react.js +12 -9
  222. package/dist/types.d.ts +0 -1
  223. package/package.json +1 -1
  224. package/dist/chunks/chunk-STAJCW4Z.js +0 -322
  225. package/dist/chunks/chunk-U4VOHNR2.js +0 -210
@@ -0,0 +1,13 @@
1
+ interface VerifyCloudHandshakeOptions {
2
+ clientId: string;
3
+ handshakeId: string;
4
+ origin: string;
5
+ }
6
+ export declare class CloudHandshakeError extends Error {
7
+ name: string;
8
+ }
9
+ export declare class CloudHandshakeServiceError extends Error {
10
+ name: string;
11
+ }
12
+ export declare function verifyCloudHandshake(token: string, options: VerifyCloudHandshakeOptions): Promise<void>;
13
+ export {};
@@ -0,0 +1,121 @@
1
+ import "../chunks/chunk-CQ52GEHY.js";
2
+
3
+ // src/cloud/CloudHandshake.ts
4
+ import { decode, verify } from "alinea/core/util/JWT";
5
+ import { isRecord } from "alinea/core/util/Objects";
6
+ import { cloudConfig } from "./CloudConfig.js";
7
+ var CloudHandshakeError = class extends Error {
8
+ name = "CloudHandshakeError";
9
+ };
10
+ var CloudHandshakeServiceError = class extends Error {
11
+ name = "CloudHandshakeServiceError";
12
+ };
13
+ var keysPromise;
14
+ var keysExpireAt = 0;
15
+ var lastForcedRefreshAt = 0;
16
+ var keyCacheLifetime = 5 * 60 * 1e3;
17
+ var forcedRefreshInterval = 60 * 1e3;
18
+ var verificationMessages = {
19
+ "Invalid signature": "Handshake token signature is invalid",
20
+ "Token expired": "Handshake token has expired",
21
+ "Token not yet valid": "Handshake token is not yet valid",
22
+ "Invalid exp value": "Handshake token expiration is invalid",
23
+ "Invalid nbf value": "Handshake token not-before claim is invalid"
24
+ };
25
+ async function verifyCloudHandshake(token, options) {
26
+ const { header } = decodeHandshakeToken(token);
27
+ if (!isRecord(header) || header.alg !== "RS256" || typeof header.kid !== "string" || !header.kid)
28
+ throw new CloudHandshakeError("Handshake token header is invalid");
29
+ let key = (await cloudKeys()).find((key2) => key2.kid === header.kid);
30
+ if (!key) {
31
+ key = (await refreshCloudKeys()).find((key2) => key2.kid === header.kid);
32
+ }
33
+ if (!key)
34
+ throw new CloudHandshakeError("Handshake token signing key is unknown");
35
+ const payload = await verify(token, key, { algorithms: ["RS256"] }).catch(
36
+ (cause) => {
37
+ throw verificationError(cause);
38
+ }
39
+ );
40
+ if (!isRecord(payload))
41
+ throw new CloudHandshakeError("Handshake token payload is invalid");
42
+ assertClaim("purpose", payload.purpose, "handshake");
43
+ assertClaim("ID", payload.handshake_id, options.handshakeId);
44
+ assertClaim("audience", payload.aud, options.clientId);
45
+ assertClaim("issuer", payload.iss, normalizedCloudUrl());
46
+ assertClaim("origin", payload.origin, options.origin);
47
+ if (typeof payload.project !== "string")
48
+ throw new CloudHandshakeError("Handshake project claim is invalid");
49
+ if (typeof payload.iat !== "number")
50
+ throw new CloudHandshakeError("Handshake issued-at claim is invalid");
51
+ if (typeof payload.exp !== "number")
52
+ throw new CloudHandshakeError("Handshake expiration claim is invalid");
53
+ }
54
+ function assertClaim(name, received, expected) {
55
+ if (received !== expected)
56
+ throw new CloudHandshakeError(
57
+ `Handshake ${name} mismatch: expected ${expected}, received ${String(received)}`
58
+ );
59
+ }
60
+ function decodeHandshakeToken(token) {
61
+ try {
62
+ return decode(token);
63
+ } catch (cause) {
64
+ throw new CloudHandshakeError("Handshake token is malformed", { cause });
65
+ }
66
+ }
67
+ function verificationError(cause) {
68
+ const reason = cause instanceof Error && verificationMessages[cause.message];
69
+ return reason ? new CloudHandshakeError(reason, { cause }) : new CloudHandshakeServiceError("Could not verify handshake token", {
70
+ cause
71
+ });
72
+ }
73
+ function cloudKeys() {
74
+ if (keysPromise && (keysExpireAt === 0 || Date.now() < keysExpireAt))
75
+ return keysPromise;
76
+ return loadCloudKeys();
77
+ }
78
+ function refreshCloudKeys() {
79
+ const now = Date.now();
80
+ if (keysPromise && keysExpireAt === 0) return keysPromise;
81
+ if (keysPromise && now - lastForcedRefreshAt < forcedRefreshInterval)
82
+ return keysPromise;
83
+ lastForcedRefreshAt = now;
84
+ return loadCloudKeys();
85
+ }
86
+ function loadCloudKeys() {
87
+ keysExpireAt = 0;
88
+ keysPromise = fetch(cloudConfig.jwks).then(async (response) => {
89
+ if (!response.ok)
90
+ throw new CloudHandshakeServiceError(
91
+ `Could not load handshake signing keys: ${response.status}`
92
+ );
93
+ const body = await response.json();
94
+ if (!isRecord(body) || !Array.isArray(body.keys))
95
+ throw new CloudHandshakeServiceError(
96
+ "Cloud returned invalid handshake signing keys"
97
+ );
98
+ keysExpireAt = Date.now() + keyCacheLifetime;
99
+ return body.keys.filter(isCloudKey);
100
+ }).catch((cause) => {
101
+ keysPromise = void 0;
102
+ keysExpireAt = 0;
103
+ if (cause instanceof CloudHandshakeServiceError) throw cause;
104
+ throw new CloudHandshakeServiceError(
105
+ "Could not load handshake signing keys",
106
+ { cause }
107
+ );
108
+ });
109
+ return keysPromise;
110
+ }
111
+ function isCloudKey(value) {
112
+ return isRecord(value) && typeof value.kid === "string";
113
+ }
114
+ function normalizedCloudUrl() {
115
+ return cloudConfig.url.replace(/\/$/, "");
116
+ }
117
+ export {
118
+ CloudHandshakeError,
119
+ CloudHandshakeServiceError,
120
+ verifyCloudHandshake
121
+ };
@@ -10,12 +10,15 @@ import type { User, UserInput } from 'alinea/core/User';
10
10
  export declare class CloudRemote extends OAuth2 implements RemoteConnection {
11
11
  #private;
12
12
  constructor(context: RequestContext, config: Config);
13
+ capabilities(): Promise<{
14
+ users: boolean;
15
+ }>;
13
16
  getTreeIfDifferent(sha: string): Promise<ReadonlyTree | undefined>;
14
17
  getBlobs(shas: ReadonlyArray<string>, options?: GetBlobsOptions): AsyncGenerator<[sha: string, blob: Uint8Array]>;
15
18
  write(request: CommitRequest): Promise<{
16
19
  sha: string;
17
20
  }>;
18
- authenticate(request: Request, options?: AuthOptions): Promise<globalThis.Response>;
21
+ authenticate(request: Request, options: AuthOptions): Promise<globalThis.Response>;
19
22
  prepareUpload(file: string, metadata?: UploadMetadata): Promise<{
20
23
  entryId: string;
21
24
  location: string;
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  package_default
3
- } from "../chunks/chunk-HFBZMKIN.js";
3
+ } from "../chunks/chunk-A6M3PNJT.js";
4
4
  import "../chunks/chunk-CQ52GEHY.js";
5
5
 
6
6
  // src/cloud/CloudRemote.ts
@@ -15,11 +15,17 @@ import { HttpError } from "alinea/core/HttpError";
15
15
  import { ShaMismatchError } from "alinea/core/source/ShaMismatchError";
16
16
  import { ReadonlyTree } from "alinea/core/source/Tree";
17
17
  import { base64 } from "alinea/core/util/Encoding";
18
- import { entries, values } from "alinea/core/util/Objects";
18
+ import { entries } from "alinea/core/util/Objects";
19
19
  import { Workspace } from "alinea/core/Workspace";
20
+ import { MediaLocation } from "alinea/core/media/MediaLocation";
20
21
  import { Response } from "@alinea/iso";
21
22
  import { AuthResultType } from "./AuthResult.js";
22
23
  import { cloudConfig } from "./CloudConfig.js";
24
+ import {
25
+ CloudHandshakeError,
26
+ CloudHandshakeServiceError,
27
+ verifyCloudHandshake
28
+ } from "./CloudHandshake.js";
23
29
  var CloudRemote = class extends OAuth2 {
24
30
  #context;
25
31
  #config;
@@ -42,6 +48,9 @@ var CloudRemote = class extends OAuth2 {
42
48
  this.#context = context;
43
49
  this.#config = config;
44
50
  }
51
+ async capabilities() {
52
+ return { users: false };
53
+ }
45
54
  async getTreeIfDifferent(sha) {
46
55
  const ctx = this.#context;
47
56
  return parseOutcome(
@@ -121,14 +130,36 @@ var CloudRemote = class extends OAuth2 {
121
130
  }
122
131
  // The cloud server will request a handshake confirmation on this route
123
132
  case AuthAction.Handshake: {
124
- const handShakeId = url.searchParams.get("handshake_id");
125
- if (!handShakeId)
133
+ const handshakeId = url.searchParams.get("handshake_id");
134
+ const handshakeToken = url.searchParams.get("handshake_token");
135
+ if (!handshakeId || !handshakeToken)
126
136
  throw new HttpError(
127
137
  400,
128
- "Provide a valid handshake id to initiate handshake"
138
+ "Provide valid handshake credentials to initiate handshake"
129
139
  );
140
+ const clientId = ctx.apiKey.split("_")[1];
141
+ if (!clientId)
142
+ throw new HttpError(401, "A Cloud API key is required for handshake");
143
+ try {
144
+ await verifyCloudHandshake(handshakeToken, {
145
+ clientId,
146
+ handshakeId,
147
+ origin: new URL(ctx.handlerUrl).origin
148
+ });
149
+ } catch (cause) {
150
+ if (cause instanceof CloudHandshakeError)
151
+ throw new HttpError(
152
+ 401,
153
+ `Invalid handshake token: ${cause.message}`,
154
+ { cause }
155
+ );
156
+ if (cause instanceof CloudHandshakeServiceError)
157
+ throw new HttpError(503, cause.message, { cause });
158
+ throw new HttpError(500, "Could not verify handshake token", { cause });
159
+ }
130
160
  const body = {
131
- handshake_id: handShakeId,
161
+ handshake_id: handshakeId,
162
+ handshake_token: handshakeToken,
132
163
  status: {
133
164
  version: package_default.version,
134
165
  roles: entries(this.#config.roles ?? {}).map(([name, role]) => {
@@ -139,9 +170,9 @@ var CloudRemote = class extends OAuth2 {
139
170
  };
140
171
  }),
141
172
  enableOAuth2: true,
142
- sourceDirectories: values(config.workspaces).flatMap((workspace) => {
143
- const { source, mediaDir } = Workspace.data(workspace);
144
- return [source, mediaDir];
173
+ sourceDirectories: entries(config.workspaces).flatMap(([key, workspace]) => {
174
+ const { source } = Workspace.data(workspace);
175
+ return [source, MediaLocation.directory(config, key)];
145
176
  }).filter(Boolean)
146
177
  }
147
178
  };
@@ -27,17 +27,17 @@ import {
27
27
 
28
28
  // src/components/Calendar.module.css
29
29
  var Calendar_default = {
30
- "Calendar-cell": "alinea-Calendar-cell",
31
- "CalendarCell": "alinea-Calendar-cell",
30
+ "Calendar-heading": "alinea-Calendar-heading",
31
+ "CalendarHeading": "alinea-Calendar-heading",
32
+ "Calendar-button": "alinea-Calendar-button",
33
+ "CalendarButton": "alinea-Calendar-button",
32
34
  "Calendar-grid": "alinea-Calendar-grid",
33
35
  "CalendarGrid": "alinea-Calendar-grid",
36
+ "Calendar": "alinea-Calendar",
34
37
  "Calendar-header": "alinea-Calendar-header",
35
38
  "CalendarHeader": "alinea-Calendar-header",
36
- "Calendar-button": "alinea-Calendar-button",
37
- "CalendarButton": "alinea-Calendar-button",
38
- "Calendar-heading": "alinea-Calendar-heading",
39
- "CalendarHeading": "alinea-Calendar-heading",
40
- "Calendar": "alinea-Calendar"
39
+ "Calendar-cell": "alinea-Calendar-cell",
40
+ "CalendarCell": "alinea-Calendar-cell"
41
41
  };
42
42
 
43
43
  // src/components/Calendar.tsx
@@ -16,10 +16,10 @@ import "../chunks/chunk-CQ52GEHY.js";
16
16
 
17
17
  // src/components/Checkbox.module.css
18
18
  var Checkbox_default = {
19
- "Checkbox-box": "alinea-Checkbox-box",
20
- "CheckboxBox": "alinea-Checkbox-box",
21
19
  "Checkbox-mark": "alinea-Checkbox-mark",
22
20
  "CheckboxMark": "alinea-Checkbox-mark",
21
+ "Checkbox-box": "alinea-Checkbox-box",
22
+ "CheckboxBox": "alinea-Checkbox-box",
23
23
  "Checkbox": "alinea-Checkbox"
24
24
  };
25
25
 
@@ -20,8 +20,8 @@ import { ColorSwatch } from "./ColorSwatch.js";
20
20
 
21
21
  // src/components/ColorSwatchPicker.module.css
22
22
  var ColorSwatchPicker_default = {
23
- "ColorSwatchPicker": "alinea-ColorSwatchPicker",
24
- "ColorSwatchPickerItem": "alinea-ColorSwatchPickerItem"
23
+ "ColorSwatchPickerItem": "alinea-ColorSwatchPickerItem",
24
+ "ColorSwatchPicker": "alinea-ColorSwatchPicker"
25
25
  };
26
26
 
27
27
  // src/components/ColorSwatchPicker.tsx
@@ -29,24 +29,24 @@ import {
29
29
 
30
30
  // src/components/ComboBox.module.css
31
31
  var ComboBox_default = {
32
- "ComboBoxItem": "alinea-ComboBoxItem",
32
+ "ComboBoxItem-check": "alinea-ComboBoxItem-check",
33
+ "ComboBoxItemCheck": "alinea-ComboBoxItem-check",
34
+ "ComboBox": "alinea-ComboBox",
33
35
  "ComboBoxTrigger-button-arrow": "alinea-ComboBoxTrigger-button-arrow",
34
36
  "ComboBoxTriggerButtonArrow": "alinea-ComboBoxTrigger-button-arrow",
35
- "ComboBoxTrigger-button": "alinea-ComboBoxTrigger-button",
36
- "ComboBoxTriggerButton": "alinea-ComboBoxTrigger-button",
37
- "ComboBoxTrigger": "alinea-ComboBoxTrigger",
38
- "ComboBoxTrigger-actions": "alinea-ComboBoxTrigger-actions",
39
- "ComboBoxTriggerActions": "alinea-ComboBoxTrigger-actions",
40
- "ComboBoxPopover-listbox": "alinea-ComboBoxPopover-listbox",
41
- "ComboBoxPopoverListbox": "alinea-ComboBoxPopover-listbox",
42
- "ComboBoxClear": "alinea-ComboBoxClear",
43
37
  "ComboBoxTrigger-input": "alinea-ComboBoxTrigger-input",
44
38
  "ComboBoxTriggerInput": "alinea-ComboBoxTrigger-input",
45
- "ComboBoxItem-check": "alinea-ComboBoxItem-check",
46
- "ComboBoxItemCheck": "alinea-ComboBoxItem-check",
39
+ "ComboBoxClear": "alinea-ComboBoxClear",
40
+ "ComboBoxItem": "alinea-ComboBoxItem",
41
+ "ComboBoxTrigger-actions": "alinea-ComboBoxTrigger-actions",
42
+ "ComboBoxTriggerActions": "alinea-ComboBoxTrigger-actions",
47
43
  "ComboBoxTrigger-button-value": "alinea-ComboBoxTrigger-button-value",
48
44
  "ComboBoxTriggerButtonValue": "alinea-ComboBoxTrigger-button-value",
49
- "ComboBox": "alinea-ComboBox"
45
+ "ComboBoxTrigger": "alinea-ComboBoxTrigger",
46
+ "ComboBoxTrigger-button": "alinea-ComboBoxTrigger-button",
47
+ "ComboBoxTriggerButton": "alinea-ComboBoxTrigger-button",
48
+ "ComboBoxPopover-listbox": "alinea-ComboBoxPopover-listbox",
49
+ "ComboBoxPopoverListbox": "alinea-ComboBoxPopover-listbox"
50
50
  };
51
51
 
52
52
  // src/components/ComboBox.tsx
@@ -19,11 +19,11 @@ import "../chunks/chunk-CQ52GEHY.js";
19
19
 
20
20
  // src/components/DateField.module.css
21
21
  var DateField_default = {
22
- "DateField-input": "alinea-DateField-input",
23
- "DateFieldInput": "alinea-DateField-input",
24
- "DateField": "alinea-DateField",
25
22
  "DateField-input-segment": "alinea-DateField-input-segment",
26
- "DateFieldInputSegment": "alinea-DateField-input-segment"
23
+ "DateFieldInputSegment": "alinea-DateField-input-segment",
24
+ "DateField": "alinea-DateField",
25
+ "DateField-input": "alinea-DateField-input",
26
+ "DateFieldInput": "alinea-DateField-input"
27
27
  };
28
28
 
29
29
  // src/components/DateField.tsx
@@ -25,14 +25,14 @@ import { Calendar } from "./Calendar.js";
25
25
 
26
26
  // src/components/DatePicker.module.css
27
27
  var DatePicker_default = {
28
- "DatePicker": "alinea-DatePicker",
29
- "DatePicker-input-segment": "alinea-DatePicker-input-segment",
30
- "DatePickerInputSegment": "alinea-DatePicker-input-segment",
31
28
  "DatePicker-input": "alinea-DatePicker-input",
32
29
  "DatePickerInput": "alinea-DatePicker-input",
30
+ "DatePicker-input-segment": "alinea-DatePicker-input-segment",
31
+ "DatePickerInputSegment": "alinea-DatePicker-input-segment",
33
32
  "DatePicker-trigger": "alinea-DatePicker-trigger",
34
33
  "DatePickerTrigger": "alinea-DatePicker-trigger",
35
- "Icon": "alinea-Icon"
34
+ "Icon": "alinea-Icon",
35
+ "DatePicker": "alinea-DatePicker"
36
36
  };
37
37
 
38
38
  // src/components/DatePicker.tsx
@@ -25,18 +25,18 @@ import { RangeCalendar } from "./Calendar.js";
25
25
 
26
26
  // src/components/DateRangePicker.module.css
27
27
  var DateRangePicker_default = {
28
- "DateRangePicker": "alinea-DateRangePicker",
29
- "DateRangePicker-input-segment": "alinea-DateRangePicker-input-segment",
30
- "DateRangePickerInputSegment": "alinea-DateRangePicker-input-segment",
31
- "DateRangePicker-trigger": "alinea-DateRangePicker-trigger",
32
- "DateRangePickerTrigger": "alinea-DateRangePicker-trigger",
28
+ "DateRangePicker-input": "alinea-DateRangePicker-input",
29
+ "DateRangePickerInput": "alinea-DateRangePicker-input",
33
30
  "DateRangePicker-inputs": "alinea-DateRangePicker-inputs",
34
31
  "DateRangePickerInputs": "alinea-DateRangePicker-inputs",
35
- "Icon": "alinea-Icon",
36
32
  "DateRangePicker-separator": "alinea-DateRangePicker-separator",
37
33
  "DateRangePickerSeparator": "alinea-DateRangePicker-separator",
38
- "DateRangePicker-input": "alinea-DateRangePicker-input",
39
- "DateRangePickerInput": "alinea-DateRangePicker-input"
34
+ "DateRangePicker": "alinea-DateRangePicker",
35
+ "DateRangePicker-trigger": "alinea-DateRangePicker-trigger",
36
+ "DateRangePickerTrigger": "alinea-DateRangePicker-trigger",
37
+ "DateRangePicker-input-segment": "alinea-DateRangePicker-input-segment",
38
+ "DateRangePickerInputSegment": "alinea-DateRangePicker-input-segment",
39
+ "Icon": "alinea-Icon"
40
40
  };
41
41
 
42
42
  // src/components/DateRangePicker.tsx
@@ -23,19 +23,19 @@ import { Icon } from "./Icon.js";
23
23
 
24
24
  // src/components/Disclosure.module.css
25
25
  var Disclosure_default = {
26
- "Disclosure": "alinea-Disclosure",
27
- "Disclosure-title": "alinea-Disclosure-title",
28
- "DisclosureTitle": "alinea-Disclosure-title",
29
- "Disclosure-panel": "alinea-Disclosure-panel",
30
- "DisclosurePanel": "alinea-Disclosure-panel",
31
26
  "Disclosure-panel-content": "alinea-Disclosure-panel-content",
32
27
  "DisclosurePanelContent": "alinea-Disclosure-panel-content",
33
28
  "Disclosure-chevron": "alinea-Disclosure-chevron",
34
29
  "DisclosureChevron": "alinea-Disclosure-chevron",
30
+ "Disclosure-heading": "alinea-Disclosure-heading",
31
+ "DisclosureHeading": "alinea-Disclosure-heading",
32
+ "Disclosure-title": "alinea-Disclosure-title",
33
+ "DisclosureTitle": "alinea-Disclosure-title",
34
+ "Disclosure": "alinea-Disclosure",
35
35
  "Disclosure-trigger": "alinea-Disclosure-trigger",
36
36
  "DisclosureTrigger": "alinea-Disclosure-trigger",
37
- "Disclosure-heading": "alinea-Disclosure-heading",
38
- "DisclosureHeading": "alinea-Disclosure-heading"
37
+ "Disclosure-panel": "alinea-Disclosure-panel",
38
+ "DisclosurePanel": "alinea-Disclosure-panel"
39
39
  };
40
40
 
41
41
  // src/components/Disclosure.tsx
@@ -20,15 +20,15 @@ import { IcRoundPublic } from "../dashboard/icons.js";
20
20
 
21
21
  // src/components/Label.module.css
22
22
  var Label_default = {
23
- "LabelError": "alinea-LabelError",
23
+ "LabelHeader": "alinea-LabelHeader",
24
+ "LabelRequired": "alinea-LabelRequired",
24
25
  "LabelIcon": "alinea-LabelIcon",
25
- "LabelTitle": "alinea-LabelTitle",
26
26
  "LabelStack": "alinea-LabelStack",
27
- "LabelRequired": "alinea-LabelRequired",
27
+ "LabelDescription": "alinea-LabelDescription",
28
28
  "LabelInline": "alinea-LabelInline",
29
29
  "LabelLabel": "alinea-LabelLabel",
30
- "LabelHeader": "alinea-LabelHeader",
31
- "LabelDescription": "alinea-LabelDescription"
30
+ "LabelError": "alinea-LabelError",
31
+ "LabelTitle": "alinea-LabelTitle"
32
32
  };
33
33
 
34
34
  // src/components/Label.tsx
@@ -41,7 +41,7 @@ export interface ListLabelProps extends Omit<ButtonProps, 'appearance' | 'childr
41
41
  description?: ReactNode;
42
42
  inline?: boolean;
43
43
  }
44
- export declare function ListLabel({ children, expanded, hasRows, shared, showFold, className, description, inline, ...props }: ListLabelProps): import("react").JSX.Element;
44
+ export declare function ListLabel({ children, expanded, hasRows, shared, showFold, className, description, inline, ...props }: ListLabelProps): import("react").JSX.Element | null;
45
45
  export interface ListErrorProps extends ComponentPropsWithoutRef<'div'> {
46
46
  }
47
47
  export declare function ListError({ className, ...props }: ListErrorProps): import("react").JSX.Element;
@@ -6,50 +6,50 @@ import "../chunks/chunk-CQ52GEHY.js";
6
6
  // src/components/List.module.css
7
7
  var List_default = {
8
8
  "ListRowActions": "alinea-ListRowActions",
9
- "ListRowFooter": "alinea-ListRowFooter",
10
- "ListRowHeader": "alinea-ListRowHeader",
11
- "ListItemDescription": "alinea-ListItemDescription",
12
- "ListItemTitle": "alinea-ListItemTitle",
9
+ "ListDragPreview-title": "alinea-ListDragPreview-title",
10
+ "ListDragPreviewTitle": "alinea-ListDragPreview-title",
13
11
  "ListItem-inner": "alinea-ListItem-inner",
14
12
  "ListItemInner": "alinea-ListItem-inner",
13
+ "ListItemStatus": "alinea-ListItemStatus",
14
+ "ListLabel": "alinea-ListLabel",
15
+ "ListRowHeader": "alinea-ListRowHeader",
16
+ "ListCreateRow": "alinea-ListCreateRow",
15
17
  "ListItem-content": "alinea-ListItem-content",
16
18
  "ListItemContent": "alinea-ListItem-content",
19
+ "ListRowFooter": "alinea-ListRowFooter",
20
+ "ListEmpty": "alinea-ListEmpty",
21
+ "ListDragPreview": "alinea-ListDragPreview",
22
+ "ListRowFoldButton": "alinea-ListRowFoldButton",
23
+ "ListItem-leading": "alinea-ListItem-leading",
24
+ "ListItemLeading": "alinea-ListItem-leading",
17
25
  "ListEmpty-content": "alinea-ListEmpty-content",
18
26
  "ListEmptyContent": "alinea-ListEmpty-content",
19
- "ListDragPreview-title": "alinea-ListDragPreview-title",
20
- "ListDragPreviewTitle": "alinea-ListDragPreview-title",
21
- "ListCreateRow": "alinea-ListCreateRow",
27
+ "ListRow": "alinea-ListRow",
28
+ "ListRowBody": "alinea-ListRowBody",
29
+ "ListRowMeta": "alinea-ListRowMeta",
22
30
  "ListItem-header": "alinea-ListItem-header",
23
31
  "ListItemHeader": "alinea-ListItem-header",
24
- "ListRowFoldButton-icon": "alinea-ListRowFoldButton-icon",
25
- "ListRowFoldButtonIcon": "alinea-ListRowFoldButton-icon",
26
- "ListRowFoldButton": "alinea-ListRowFoldButton",
27
- "ListRowMeta": "alinea-ListRowMeta",
28
- "ListDragPreview-body": "alinea-ListDragPreview-body",
29
- "ListDragPreviewBody": "alinea-ListDragPreview-body",
30
- "ListItem": "alinea-ListItem",
31
32
  "ListRowDrag": "alinea-ListRowDrag",
32
- "ListEmpty-title": "alinea-ListEmpty-title",
33
- "ListEmptyTitle": "alinea-ListEmpty-title",
33
+ "ListItem": "alinea-ListItem",
34
34
  "ListEmpty-description": "alinea-ListEmpty-description",
35
35
  "ListEmptyDescription": "alinea-ListEmpty-description",
36
- "ListLabel": "alinea-ListLabel",
36
+ "ListDragPreview-body": "alinea-ListDragPreview-body",
37
+ "ListDragPreviewBody": "alinea-ListDragPreview-body",
38
+ "ListItemVisual": "alinea-ListItemVisual",
37
39
  "ListItem-trailing": "alinea-ListItem-trailing",
38
40
  "ListItemTrailing": "alinea-ListItem-trailing",
39
- "ListDragPreview-icon": "alinea-ListDragPreview-icon",
40
- "ListDragPreviewIcon": "alinea-ListDragPreview-icon",
41
- "ListItemVisual": "alinea-ListItemVisual",
41
+ "ListItemDescription": "alinea-ListItemDescription",
42
+ "ListEmpty-title": "alinea-ListEmpty-title",
43
+ "ListEmptyTitle": "alinea-ListEmpty-title",
44
+ "ListRowFoldButton-icon": "alinea-ListRowFoldButton-icon",
45
+ "ListRowFoldButtonIcon": "alinea-ListRowFoldButton-icon",
46
+ "ListItemTitle": "alinea-ListItemTitle",
47
+ "ListRowDragHandle": "alinea-ListRowDragHandle",
42
48
  "ListError": "alinea-ListError",
43
- "ListRowBody": "alinea-ListRowBody",
44
49
  "ListRowBadges": "alinea-ListRowBadges",
45
- "ListRow": "alinea-ListRow",
46
- "ListItemStatus": "alinea-ListItemStatus",
47
- "ListRowDragHandle": "alinea-ListRowDragHandle",
48
- "ListEmpty": "alinea-ListEmpty",
49
- "ListItem-leading": "alinea-ListItem-leading",
50
- "ListItemLeading": "alinea-ListItem-leading",
50
+ "ListDragPreview-icon": "alinea-ListDragPreview-icon",
51
+ "ListDragPreviewIcon": "alinea-ListDragPreview-icon",
51
52
  "ListRowSettings": "alinea-ListRowSettings",
52
- "ListDragPreview": "alinea-ListDragPreview",
53
53
  "ListCreateRow-inner": "alinea-ListCreateRow-inner",
54
54
  "ListCreateRowInner": "alinea-ListCreateRow-inner"
55
55
  };
@@ -186,6 +186,7 @@ function ListLabel({
186
186
  inline = false,
187
187
  ...props
188
188
  }) {
189
+ if (inline && !showFold && !description && !shared) return null;
189
190
  return /* @__PURE__ */ jsxs(
190
191
  Button,
191
192
  {
@@ -28,11 +28,11 @@ import { Icon } from "./Icon.js";
28
28
 
29
29
  // src/components/Menu.module.css
30
30
  var Menu_default = {
31
+ "MenuItem": "alinea-MenuItem",
31
32
  "MenuItem-icon": "alinea-MenuItem-icon",
32
33
  "MenuItemIcon": "alinea-MenuItem-icon",
33
- "MenuItem": "alinea-MenuItem",
34
- "Menu": "alinea-Menu",
35
34
  "MenuHeader": "alinea-MenuHeader",
35
+ "Menu": "alinea-Menu",
36
36
  "MenuSeparator": "alinea-MenuSeparator"
37
37
  };
38
38
 
@@ -44,42 +44,42 @@ import { Popover } from "./Popover.js";
44
44
 
45
45
  // src/components/MultipleSelect.module.css
46
46
  var MultipleSelect_default = {
47
- "MultipleSelectItem": "alinea-MultipleSelectItem",
48
- "MultipleSelect-value": "alinea-MultipleSelect-value",
49
- "MultipleSelectValue": "alinea-MultipleSelect-value",
50
- "MultipleSelectPopover": "alinea-MultipleSelectPopover",
51
47
  "MultipleSelectPopover-search-input": "alinea-MultipleSelectPopover-search-input",
52
48
  "MultipleSelectPopoverSearchInput": "alinea-MultipleSelectPopover-search-input",
53
- "MultipleSelect-select": "alinea-MultipleSelect-select",
54
- "MultipleSelectSelect": "alinea-MultipleSelect-select",
49
+ "MultipleSelect-container": "alinea-MultipleSelect-container",
50
+ "MultipleSelectContainer": "alinea-MultipleSelect-container",
51
+ "MultipleSelect-value": "alinea-MultipleSelect-value",
52
+ "MultipleSelectValue": "alinea-MultipleSelect-value",
53
+ "MultipleSelectPopover-search-field": "alinea-MultipleSelectPopover-search-field",
54
+ "MultipleSelectPopoverSearchField": "alinea-MultipleSelectPopover-search-field",
55
55
  "MultipleSelectPopover-search-clear": "alinea-MultipleSelectPopover-search-clear",
56
56
  "MultipleSelectPopoverSearchClear": "alinea-MultipleSelectPopover-search-clear",
57
- "MultipleSelectPopover-search-icon": "alinea-MultipleSelectPopover-search-icon",
58
- "MultipleSelectPopoverSearchIcon": "alinea-MultipleSelectPopover-search-icon",
59
- "MultipleSelect-placeholder": "alinea-MultipleSelect-placeholder",
60
- "MultipleSelectPlaceholder": "alinea-MultipleSelect-placeholder",
61
57
  "MultipleSelectPopover-search-clear-icon": "alinea-MultipleSelectPopover-search-clear-icon",
62
58
  "MultipleSelectPopoverSearchClearIcon": "alinea-MultipleSelectPopover-search-clear-icon",
63
- "MultipleSelect-trigger": "alinea-MultipleSelect-trigger",
64
- "MultipleSelectTrigger": "alinea-MultipleSelect-trigger",
65
- "MultipleSelect-tagGroup": "alinea-MultipleSelect-tagGroup",
66
- "MultipleSelectTagGroup": "alinea-MultipleSelect-tagGroup",
59
+ "MultipleSelect-trigger-icon": "alinea-MultipleSelect-trigger-icon",
60
+ "MultipleSelectTriggerIcon": "alinea-MultipleSelect-trigger-icon",
61
+ "MultipleSelect-select": "alinea-MultipleSelect-select",
62
+ "MultipleSelectSelect": "alinea-MultipleSelect-select",
63
+ "MultipleSelectPopover": "alinea-MultipleSelectPopover",
64
+ "MultipleSelectItem": "alinea-MultipleSelectItem",
67
65
  "MultipleSelectItem-check": "alinea-MultipleSelectItem-check",
68
66
  "MultipleSelectItemCheck": "alinea-MultipleSelectItem-check",
69
- "MultipleSelectPopover-search-field": "alinea-MultipleSelectPopover-search-field",
70
- "MultipleSelectPopoverSearchField": "alinea-MultipleSelectPopover-search-field",
71
- "MultipleSelectPopover-empty": "alinea-MultipleSelectPopover-empty",
72
- "MultipleSelectPopoverEmpty": "alinea-MultipleSelectPopover-empty",
67
+ "MultipleSelectPopover-search-icon": "alinea-MultipleSelectPopover-search-icon",
68
+ "MultipleSelectPopoverSearchIcon": "alinea-MultipleSelectPopover-search-icon",
73
69
  "MultipleSelectPopover-listbox": "alinea-MultipleSelectPopover-listbox",
74
70
  "MultipleSelectPopoverListbox": "alinea-MultipleSelectPopover-listbox",
75
- "MultipleSelect-trigger-icon": "alinea-MultipleSelect-trigger-icon",
76
- "MultipleSelectTriggerIcon": "alinea-MultipleSelect-trigger-icon",
77
- "MultipleSelect-container": "alinea-MultipleSelect-container",
78
- "MultipleSelectContainer": "alinea-MultipleSelect-container",
79
- "MultipleSelectPopover-search": "alinea-MultipleSelectPopover-search",
80
- "MultipleSelectPopoverSearch": "alinea-MultipleSelectPopover-search",
71
+ "MultipleSelect-placeholder": "alinea-MultipleSelect-placeholder",
72
+ "MultipleSelectPlaceholder": "alinea-MultipleSelect-placeholder",
73
+ "MultipleSelectPopover-empty": "alinea-MultipleSelectPopover-empty",
74
+ "MultipleSelectPopoverEmpty": "alinea-MultipleSelectPopover-empty",
75
+ "MultipleSelect-tagGroup": "alinea-MultipleSelect-tagGroup",
76
+ "MultipleSelectTagGroup": "alinea-MultipleSelect-tagGroup",
81
77
  "MultipleSelect-tagGroup-tagList": "alinea-MultipleSelect-tagGroup-tagList",
82
- "MultipleSelectTagGroupTagList": "alinea-MultipleSelect-tagGroup-tagList"
78
+ "MultipleSelectTagGroupTagList": "alinea-MultipleSelect-tagGroup-tagList",
79
+ "MultipleSelect-trigger": "alinea-MultipleSelect-trigger",
80
+ "MultipleSelectTrigger": "alinea-MultipleSelect-trigger",
81
+ "MultipleSelectPopover-search": "alinea-MultipleSelectPopover-search",
82
+ "MultipleSelectPopoverSearch": "alinea-MultipleSelectPopover-search"
83
83
  };
84
84
 
85
85
  // src/components/MultipleSelect.tsx