@arbidocs/blocks 0.4.5 → 0.4.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 (131) hide show
  1. package/README.md +46 -6
  2. package/dist/agents/index.cjs +163 -162
  3. package/dist/agents/index.js +6 -5
  4. package/dist/chat/ChatMessageContent.d.ts +16 -0
  5. package/dist/chat/ChatPage.d.ts +11 -8
  6. package/dist/chat/ChatThreads.d.ts +3 -1
  7. package/dist/chat/CitationMark.d.ts +18 -0
  8. package/dist/chat/chat-page-types.d.ts +75 -1
  9. package/dist/chat/index.cjs +126 -117
  10. package/dist/chat/index.d.ts +3 -1
  11. package/dist/chat/index.js +5 -4
  12. package/dist/{chunk-3MIQASHO.cjs → chunk-23XL6SVZ.cjs} +39 -19
  13. package/dist/chunk-23XL6SVZ.cjs.map +1 -0
  14. package/dist/{chunk-ULWRNGGE.cjs → chunk-2ZTONLT5.cjs} +4 -25
  15. package/dist/chunk-2ZTONLT5.cjs.map +1 -0
  16. package/dist/{chunk-O637DUKS.cjs → chunk-56BUD74K.cjs} +28 -28
  17. package/dist/{chunk-O637DUKS.cjs.map → chunk-56BUD74K.cjs.map} +1 -1
  18. package/dist/{chunk-YLOKCIQJ.cjs → chunk-5SLLMK5K.cjs} +421 -115
  19. package/dist/chunk-5SLLMK5K.cjs.map +1 -0
  20. package/dist/{chunk-SS23F63U.cjs → chunk-5ZBP7TCD.cjs} +55 -3
  21. package/dist/chunk-5ZBP7TCD.cjs.map +1 -0
  22. package/dist/{chunk-3PZPRAAR.cjs → chunk-67HGXV4I.cjs} +14 -14
  23. package/dist/{chunk-3PZPRAAR.cjs.map → chunk-67HGXV4I.cjs.map} +1 -1
  24. package/dist/{chunk-RCP6THBS.js → chunk-7OCFHEE6.js} +3 -3
  25. package/dist/{chunk-RCP6THBS.js.map → chunk-7OCFHEE6.js.map} +1 -1
  26. package/dist/{chunk-TX2ZICS7.js → chunk-CPMNAJLF.js} +4 -24
  27. package/dist/chunk-CPMNAJLF.js.map +1 -0
  28. package/dist/{chunk-5XTZFH65.js → chunk-CVFBSUXL.js} +5 -5
  29. package/dist/{chunk-5XTZFH65.js.map → chunk-CVFBSUXL.js.map} +1 -1
  30. package/dist/chunk-DCDVWPMB.cjs +29 -0
  31. package/dist/chunk-DCDVWPMB.cjs.map +1 -0
  32. package/dist/{chunk-TI4UTYRL.js → chunk-EY2RJW27.js} +258 -10
  33. package/dist/chunk-EY2RJW27.js.map +1 -0
  34. package/dist/{chunk-7YADKWZT.js → chunk-G2E3O3HI.js} +3 -3
  35. package/dist/{chunk-7YADKWZT.js.map → chunk-G2E3O3HI.js.map} +1 -1
  36. package/dist/{chunk-6YHWXMPQ.js → chunk-G2T3KTZ3.js} +419 -115
  37. package/dist/chunk-G2T3KTZ3.js.map +1 -0
  38. package/dist/{chunk-2NNTQLBY.js → chunk-IAKUTBPX.js} +4 -4
  39. package/dist/{chunk-2NNTQLBY.js.map → chunk-IAKUTBPX.js.map} +1 -1
  40. package/dist/{chunk-IZHWP6WQ.cjs → chunk-JG4TFS3Z.cjs} +6 -6
  41. package/dist/{chunk-IZHWP6WQ.cjs.map → chunk-JG4TFS3Z.cjs.map} +1 -1
  42. package/dist/chunk-JLOYWXRB.js +1156 -0
  43. package/dist/chunk-JLOYWXRB.js.map +1 -0
  44. package/dist/{chunk-WJZBJUPX.js → chunk-KXMDOTGW.js} +56 -4
  45. package/dist/chunk-KXMDOTGW.js.map +1 -0
  46. package/dist/{chunk-2VBJ763Y.js → chunk-KZJAG7T3.js} +37 -7
  47. package/dist/chunk-KZJAG7T3.js.map +1 -0
  48. package/dist/{chunk-RIL7G7AS.cjs → chunk-MGUHR3JI.cjs} +4 -4
  49. package/dist/{chunk-RIL7G7AS.cjs.map → chunk-MGUHR3JI.cjs.map} +1 -1
  50. package/dist/{chunk-NPKGUQU5.js → chunk-NJL4LIXX.js} +4 -4
  51. package/dist/{chunk-NPKGUQU5.js.map → chunk-NJL4LIXX.js.map} +1 -1
  52. package/dist/{chunk-DN3NFNIA.cjs → chunk-QMDLPO3M.cjs} +266 -10
  53. package/dist/chunk-QMDLPO3M.cjs.map +1 -0
  54. package/dist/chunk-TJMKFY5P.js +27 -0
  55. package/dist/chunk-TJMKFY5P.js.map +1 -0
  56. package/dist/{chunk-3PJCET7H.js → chunk-UHVNYKV2.js} +38 -18
  57. package/dist/chunk-UHVNYKV2.js.map +1 -0
  58. package/dist/{chunk-6CHMNKXC.cjs → chunk-UTYQPVIW.cjs} +11 -11
  59. package/dist/chunk-UTYQPVIW.cjs.map +1 -0
  60. package/dist/{chunk-KHX2BX3S.cjs → chunk-VGOFFCMT.cjs} +37 -5
  61. package/dist/chunk-VGOFFCMT.cjs.map +1 -0
  62. package/dist/{chunk-67MKU5U7.js → chunk-YMHGF6R5.js} +8 -8
  63. package/dist/chunk-YMHGF6R5.js.map +1 -0
  64. package/dist/chunk-YVIOCITQ.cjs +1186 -0
  65. package/dist/chunk-YVIOCITQ.cjs.map +1 -0
  66. package/dist/{chunk-MVNCQDDE.cjs → chunk-ZVPTFTGV.cjs} +4 -4
  67. package/dist/{chunk-MVNCQDDE.cjs.map → chunk-ZVPTFTGV.cjs.map} +1 -1
  68. package/dist/collaboration/index.cjs +38 -37
  69. package/dist/collaboration/index.js +3 -2
  70. package/dist/connect/index.cjs +358 -19
  71. package/dist/connect/index.cjs.map +1 -1
  72. package/dist/connect/index.d.ts +1 -0
  73. package/dist/connect/index.js +341 -9
  74. package/dist/connect/index.js.map +1 -1
  75. package/dist/connection/ConnectedSettings.d.ts +64 -0
  76. package/dist/facts/index.cjs +2 -2
  77. package/dist/facts/index.js +2 -2
  78. package/dist/files/index.cjs +15 -14
  79. package/dist/files/index.cjs.map +1 -1
  80. package/dist/files/index.js +5 -4
  81. package/dist/files/index.js.map +1 -1
  82. package/dist/home/index.cjs +19 -19
  83. package/dist/home/index.js +4 -4
  84. package/dist/index.cjs +526 -477
  85. package/dist/index.cjs.map +1 -1
  86. package/dist/index.js +17 -16
  87. package/dist/index.js.map +1 -1
  88. package/dist/lib/bottom-inset.d.ts +16 -0
  89. package/dist/lib/useElementSize.d.ts +13 -0
  90. package/dist/lib/useFillHeight.d.ts +10 -0
  91. package/dist/settings/account-views.d.ts +55 -0
  92. package/dist/settings/index.cjs +179 -1148
  93. package/dist/settings/index.cjs.map +1 -1
  94. package/dist/settings/index.d.ts +1 -0
  95. package/dist/settings/index.js +10 -1073
  96. package/dist/settings/index.js.map +1 -1
  97. package/dist/shell/InstallPrompt.d.ts +28 -0
  98. package/dist/shell/MobileBars.d.ts +1 -1
  99. package/dist/shell/index.cjs +85 -45
  100. package/dist/shell/index.d.ts +4 -0
  101. package/dist/shell/index.js +3 -3
  102. package/dist/shell/install-instructions.d.ts +19 -0
  103. package/dist/shell/types.d.ts +6 -0
  104. package/dist/shell/use-install-prompt.d.ts +49 -0
  105. package/dist/site/index.cjs +62 -62
  106. package/dist/site/index.js +2 -2
  107. package/dist/studio/index.cjs +78 -77
  108. package/dist/studio/index.cjs.map +1 -1
  109. package/dist/studio/index.js +8 -7
  110. package/dist/studio/index.js.map +1 -1
  111. package/dist/theme/ThemeEditor.d.ts +4 -2
  112. package/dist/workspaces/index.cjs +4 -3
  113. package/dist/workspaces/index.cjs.map +1 -1
  114. package/dist/workspaces/index.js +3 -2
  115. package/dist/workspaces/index.js.map +1 -1
  116. package/package.json +8 -4
  117. package/src/blocks.css +30 -0
  118. package/dist/chunk-2VBJ763Y.js.map +0 -1
  119. package/dist/chunk-3MIQASHO.cjs.map +0 -1
  120. package/dist/chunk-3PJCET7H.js.map +0 -1
  121. package/dist/chunk-67MKU5U7.js.map +0 -1
  122. package/dist/chunk-6CHMNKXC.cjs.map +0 -1
  123. package/dist/chunk-6YHWXMPQ.js.map +0 -1
  124. package/dist/chunk-DN3NFNIA.cjs.map +0 -1
  125. package/dist/chunk-KHX2BX3S.cjs.map +0 -1
  126. package/dist/chunk-SS23F63U.cjs.map +0 -1
  127. package/dist/chunk-TI4UTYRL.js.map +0 -1
  128. package/dist/chunk-TX2ZICS7.js.map +0 -1
  129. package/dist/chunk-ULWRNGGE.cjs.map +0 -1
  130. package/dist/chunk-WJZBJUPX.js.map +0 -1
  131. package/dist/chunk-YLOKCIQJ.cjs.map +0 -1
@@ -4,15 +4,17 @@ import { UsageMeter } from '../chunk-U2E3WT3J.js';
4
4
  import { TONE_BORDER, TONE_SURFACE, ToneBadge } from '../chunk-DPLRHEJZ.js';
5
5
  export { MultiSelect } from '../chunk-CQCC7LE7.js';
6
6
  import { TabHeader } from '../chunk-UBNVIIBT.js';
7
+ import { ModalScaffold, ModalSection, ModalSectionTitle, ModalHeader } from '../chunk-CPMNAJLF.js';
8
+ export { MODAL_SECTION_TITLE_CLASS, ModalHeader, ModalScaffold, ModalSection, ModalSectionTitle } from '../chunk-CPMNAJLF.js';
9
+ export { ActiveSessionsDialog, AvatarPicker, DEFAULT_ACTIVE_SESSIONS_DIALOG_LABELS, DEFAULT_AVATAR_PICKER_LABELS, DEFAULT_DELETE_ACCOUNT_DIALOG_LABELS, DEFAULT_LOGOUT_DIALOG_LABELS, DEFAULT_PASSWORD_CHANGE_DIALOG_LABELS, DEFAULT_PROFILE_CARD_LABELS, DEFAULT_SETTINGS_DANGER_ZONE_LABELS, DeleteAccountDialog, EMAIL_NOTIFICATION_CATEGORIES, EMAIL_NOTIFICATION_KEYS, LogoutDialog, NotificationCategoryList, PasswordChangeDialog, ProfileCard, SettingsActionRow, SettingsCard, SettingsDangerZone, SettingsPanel, SettingsRow, SettingsSection, SettingsSwitchGroup, SettingsSwitchRow, formatSessionTtl, toActiveSessionViews, toDeleteBlockerViews, toLogoutSessionViews, toNotificationCategories } from '../chunk-JLOYWXRB.js';
10
+ import '../chunk-VILAPTCB.js';
7
11
  import '../chunk-NPLYHR2E.js';
8
- import { PasswordStrengthInput } from '../chunk-VILAPTCB.js';
9
- import { ModalScaffold, useRestoreFocus, ModalSection, ModalSectionTitle, ModalHeader } from '../chunk-TX2ZICS7.js';
10
- export { MODAL_SECTION_TITLE_CLASS, ModalHeader, ModalScaffold, ModalSection, ModalSectionTitle } from '../chunk-TX2ZICS7.js';
11
- import { testIdOr, prefixedTestId } from '../chunk-7F6CBP3Z.js';
12
12
  import { formatCount } from '../chunk-OXF2IFXG.js';
13
- import { useMemo, useRef, useId, useState, useEffect, Fragment as Fragment$1 } from 'react';
14
- import { AlertTriangle, CheckCircle2, AlertCircle, Loader2, LogOut, ChevronDown, ChevronRight, Radio, History, Undo2, Star, Trash2, Users, Sparkles, Brain, RefreshCw, Wifi, WifiOff, Crown, Pencil, Plus, Search, ChevronsUpDown, TriangleAlert, Filter, MoreVertical, Check, Tag, Info, Gift, PlugIcon, ExternalLink, ShieldCheck, Plug, Camera, MessageCircleQuestionMark, BookOpen, UserPlus, BadgeCent, ChartNoAxesColumn, FileText, X, Mail, Send, Clock, Infinity, ArrowRight, Copy, FunnelX, Ban } from 'lucide-react';
15
- import { Button, Dialog, DialogContent, DialogHeader, DialogTitle, DialogDescription, Input, DialogFooter, Collapsible, CollapsibleTrigger, CollapsibleContent, cn, Select, SelectTrigger, SelectValue, SelectContent, SelectItem, Tooltip, TooltipTrigger, TooltipContent, Switch, Checkbox, Label, Textarea, ScrollArea, Command, Popover, PopoverAnchor, PopoverContent, CommandList, PopoverTrigger, CommandInput, DropdownMenu, DropdownMenuTrigger, DropdownMenuContent, DropdownMenuLabel, DropdownMenuSeparator, Badge, Avatar, AvatarImage, AvatarFallback, Progress, CommandEmpty, CommandGroup, CommandItem, getDocIcon, DropdownMenuItem } from '@arbidocs/react/ui';
13
+ import '../chunk-TJMKFY5P.js';
14
+ import { testIdOr, prefixedTestId } from '../chunk-7F6CBP3Z.js';
15
+ import { useMemo, useRef, useState, useId, useEffect, Fragment as Fragment$1 } from 'react';
16
+ import { AlertTriangle, History, Undo2, Star, Trash2, Users, Sparkles, Brain, RefreshCw, Wifi, WifiOff, Crown, ChevronDown, ChevronRight, Pencil, Plus, Loader2, Search, ChevronsUpDown, TriangleAlert, Filter, MoreVertical, Check, Tag, Info, Gift, PlugIcon, CheckCircle2, ExternalLink, ShieldCheck, Plug, AlertCircle, MessageCircleQuestionMark, BookOpen, UserPlus, BadgeCent, ChartNoAxesColumn, FileText, X, Mail, Send, Clock, Infinity, ArrowRight, Copy, LogOut, FunnelX, Ban } from 'lucide-react';
17
+ import { Button, cn, DialogFooter, Select, SelectTrigger, SelectValue, SelectContent, SelectItem, Input, Tooltip, TooltipTrigger, TooltipContent, Switch, Dialog, DialogContent, DialogTitle, DialogDescription, Label, Textarea, Checkbox, ScrollArea, Command, Popover, PopoverAnchor, PopoverContent, CommandList, PopoverTrigger, CommandInput, DropdownMenu, DropdownMenuTrigger, DropdownMenuContent, DropdownMenuLabel, DropdownMenuSeparator, Badge, DialogHeader, Progress, CommandEmpty, CommandGroup, CommandItem, getDocIcon, DropdownMenuItem } from '@arbidocs/react/ui';
16
18
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
17
19
  import * as RadioGroupPrimitive from '@radix-ui/react-radio-group';
18
20
  import { Command as Command$1 } from 'cmdk';
@@ -79,454 +81,6 @@ function ConfirmDialog({
79
81
  }
80
82
  );
81
83
  }
82
- var DEFAULT_PASSWORD_CHANGE_DIALOG_LABELS = {
83
- setNewPasswordTitle: "Set New Password",
84
- changeMasterPasswordTitle: "Change Master Password",
85
- recoveryDescription: "Set a new password for your recovered account",
86
- changeDescription: "Change your master password dialog",
87
- passwordChanged: "Password changed",
88
- done: "Done",
89
- recoverySuccessful: "Recovery successful. Set a new master password to continue.",
90
- currentPassword: "Current Password",
91
- currentPasswordPlaceholder: "Enter current password",
92
- masterPassword: "Master Password",
93
- newPassword: "New Password",
94
- confirmPassword: "Confirm Password",
95
- confirmNewPassword: "Confirm New Password",
96
- workspacesRekeyed: (count) => `${formatCount(count, { one: "workspace", other: "workspaces" })} will be re-keyed with your new password.`,
97
- cancel: "Cancel",
98
- settingPassword: "Setting Password...",
99
- changingPassword: "Changing Password...",
100
- continue: "Continue",
101
- changePassword: "Change Password"
102
- };
103
- function PasswordChangeDialog({
104
- open,
105
- onClose,
106
- recoveryMode,
107
- currentPassword,
108
- onCurrentPasswordChange,
109
- newPassword,
110
- onNewPasswordChange,
111
- confirmPassword,
112
- onConfirmPasswordChange,
113
- getUnmetRequirement,
114
- workspaceCount,
115
- error,
116
- isProcessing,
117
- isSubmitDisabled,
118
- onSubmit,
119
- success,
120
- onDone,
121
- labels,
122
- passwordInputLabels,
123
- testId,
124
- testIds,
125
- passwordInputTestIds
126
- }) {
127
- const currentPasswordId = useId();
128
- const l = useMemo(() => ({ ...DEFAULT_PASSWORD_CHANGE_DIALOG_LABELS, ...labels }), [labels]);
129
- const handleSubmit = (e) => {
130
- e.preventDefault();
131
- onSubmit();
132
- };
133
- return /* @__PURE__ */ jsx(Dialog, { open, onOpenChange: (next) => !next && onClose(), children: /* @__PURE__ */ jsxs(
134
- DialogContent,
135
- {
136
- presentation: "sheet",
137
- className: "sm:max-w-md",
138
- "data-testid": testIdOr(testId, { testId: "change-password-dialog" }),
139
- children: [
140
- /* @__PURE__ */ jsxs(DialogHeader, { children: [
141
- /* @__PURE__ */ jsx(DialogTitle, { children: recoveryMode ? l.setNewPasswordTitle : l.changeMasterPasswordTitle }),
142
- /* @__PURE__ */ jsx(DialogDescription, { className: "sr-only", children: recoveryMode ? l.recoveryDescription : l.changeDescription })
143
- ] }),
144
- success ? /* @__PURE__ */ jsxs("div", { className: "space-y-4", children: [
145
- /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2 text-green-text", children: [
146
- /* @__PURE__ */ jsx(CheckCircle2, { className: "h-5 w-5" }),
147
- /* @__PURE__ */ jsx("span", { className: "font-medium", children: l.passwordChanged })
148
- ] }),
149
- success,
150
- /* @__PURE__ */ jsx("div", { className: "flex justify-end", children: /* @__PURE__ */ jsx(
151
- Button,
152
- {
153
- onClick: onDone,
154
- "data-testid": testIdOr(testIds?.done, { testId: "change-password-done-button" }),
155
- children: l.done
156
- }
157
- ) })
158
- ] }) : /* @__PURE__ */ jsxs("form", { onSubmit: handleSubmit, className: "space-y-3", children: [
159
- recoveryMode && /* @__PURE__ */ jsx("p", { className: "text-sm font-medium text-green-text", children: l.recoverySuccessful }),
160
- !recoveryMode && /* @__PURE__ */ jsxs("div", { className: "space-y-1.5", children: [
161
- /* @__PURE__ */ jsxs("label", { htmlFor: currentPasswordId, className: "text-sm font-medium text-foreground", children: [
162
- l.currentPassword,
163
- " ",
164
- /* @__PURE__ */ jsx("span", { className: "text-red-text", children: "*" })
165
- ] }),
166
- /* @__PURE__ */ jsx(
167
- Input,
168
- {
169
- id: currentPasswordId,
170
- type: "password",
171
- value: currentPassword,
172
- onChange: (e) => onCurrentPasswordChange(e.target.value),
173
- disabled: isProcessing,
174
- placeholder: l.currentPasswordPlaceholder,
175
- autoComplete: "current-password",
176
- className: "placeholder:text-muted-foreground",
177
- "data-testid": testIdOr(testIds?.currentInput, {
178
- testId: "change-password-current-input"
179
- })
180
- }
181
- )
182
- ] }),
183
- /* @__PURE__ */ jsx(
184
- PasswordStrengthInput,
185
- {
186
- password: newPassword,
187
- confirmPassword,
188
- onPasswordChange: onNewPasswordChange,
189
- onConfirmPasswordChange,
190
- showConfirmation: true,
191
- disabled: isProcessing,
192
- passwordLabel: recoveryMode ? l.masterPassword : l.newPassword,
193
- confirmLabel: recoveryMode ? l.confirmPassword : l.confirmNewPassword,
194
- labels: passwordInputLabels,
195
- testIds: passwordInputTestIds,
196
- layout: recoveryMode ? "side-by-side" : "stacked",
197
- showStrengthIndicator: true,
198
- getUnmetRequirement
199
- }
200
- ),
201
- workspaceCount > 0 && /* @__PURE__ */ jsx(
202
- "div",
203
- {
204
- className: "rounded-md bg-green-bg p-3",
205
- "data-testid": testIdOr(testIds?.workspaceCount, {
206
- testId: "change-password-workspace-count"
207
- }),
208
- children: /* @__PURE__ */ jsxs("div", { className: "flex gap-2", children: [
209
- /* @__PURE__ */ jsx(CheckCircle2, { className: "h-5 w-5 flex-shrink-0 text-green-text" }),
210
- /* @__PURE__ */ jsx("p", { className: "text-sm text-green-text", children: l.workspacesRekeyed(workspaceCount) })
211
- ] })
212
- }
213
- ),
214
- error && /* @__PURE__ */ jsx(
215
- "div",
216
- {
217
- className: "rounded-md bg-red-bg p-3",
218
- "data-testid": testIdOr(testIds?.error, { testId: "change-password-error" }),
219
- children: /* @__PURE__ */ jsxs("div", { className: "flex gap-2", children: [
220
- /* @__PURE__ */ jsx(AlertCircle, { className: "h-5 w-5 flex-shrink-0 text-red-text" }),
221
- /* @__PURE__ */ jsx("p", { className: "text-sm text-red-text", children: error })
222
- ] })
223
- }
224
- ),
225
- /* @__PURE__ */ jsxs("div", { className: "flex flex-col-reverse sm:flex-row sm:justify-end gap-3 pt-4", children: [
226
- !recoveryMode && /* @__PURE__ */ jsx(
227
- Button,
228
- {
229
- type: "button",
230
- variant: "outline",
231
- onClick: onClose,
232
- disabled: isProcessing,
233
- "data-testid": testIdOr(testIds?.cancel, {
234
- testId: "change-password-cancel-button"
235
- }),
236
- children: l.cancel
237
- }
238
- ),
239
- /* @__PURE__ */ jsx(
240
- Button,
241
- {
242
- type: "submit",
243
- disabled: isSubmitDisabled,
244
- className: recoveryMode ? "w-full" : "",
245
- "data-testid": testIdOr(testIds?.submit, { testId: "change-password-submit-button" }),
246
- children: isProcessing ? /* @__PURE__ */ jsxs(Fragment, { children: [
247
- /* @__PURE__ */ jsx(Loader2, { className: "mr-2 h-4 w-4 animate-spin" }),
248
- recoveryMode ? l.settingPassword : l.changingPassword
249
- ] }) : recoveryMode ? l.continue : l.changePassword
250
- }
251
- )
252
- ] })
253
- ] })
254
- ]
255
- }
256
- ) });
257
- }
258
- var DEFAULT_LOGOUT_DIALOG_LABELS = {
259
- title: "Logout",
260
- descriptionAll: "End this session or all active sessions?",
261
- descriptionThis: "End this session and return to the login page.",
262
- cancel: "Cancel",
263
- allSessions: "All sessions",
264
- offlineTooltip: "Ending all sessions needs a connection \u2014 you can still log out of this device.",
265
- thisSession: "This session",
266
- offlineNote: "You\u2019re offline \u2014 ending all sessions needs a connection. You can still log out of this device.",
267
- activeSessions: (count) => formatCount(count, { one: "active session", other: "active sessions" }),
268
- workspaces: (count) => formatCount(count, { one: "workspace", other: "workspaces" }),
269
- ttl: (ttlLabel) => `TTL ${ttlLabel}`
270
- };
271
- function SessionRow({
272
- session,
273
- icon,
274
- labels
275
- }) {
276
- const { status } = session;
277
- return /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-3 rounded-md bg-muted/50 px-3 py-2", children: [
278
- icon && /* @__PURE__ */ jsx("div", { className: "flex-shrink-0", children: icon }),
279
- /* @__PURE__ */ jsxs("div", { className: "min-w-0 flex-1", children: [
280
- /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
281
- /* @__PURE__ */ jsx("code", { className: "truncate font-mono text-sm", children: session.id.slice(0, 12) }),
282
- /* @__PURE__ */ jsx(
283
- Badge,
284
- {
285
- variant: status === "agent" ? "default" : "secondary",
286
- className: "px-1 py-0 text-sm",
287
- children: status
288
- }
289
- )
290
- ] }),
291
- /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2 text-sm text-muted-foreground", children: [
292
- session.ipAddress && /* @__PURE__ */ jsx("span", { children: session.ipAddress }),
293
- /* @__PURE__ */ jsx("span", { children: labels.ttl(session.ttlLabel) }),
294
- session.workspaceCount > 0 && /* @__PURE__ */ jsx("span", { children: labels.workspaces(session.workspaceCount) })
295
- ] })
296
- ] })
297
- ] });
298
- }
299
- function LogoutDialog({
300
- open,
301
- onClose,
302
- onLogoutThis,
303
- onLogoutAll,
304
- canLogoutAll,
305
- isOnline,
306
- sessions,
307
- renderSessionIcon,
308
- labels,
309
- testId,
310
- testIds
311
- }) {
312
- const l = useMemo(() => ({ ...DEFAULT_LOGOUT_DIALOG_LABELS, ...labels }), [labels]);
313
- const [sessionsOpen, setSessionsOpen] = useState(false);
314
- const restoreFocus = useRestoreFocus();
315
- return /* @__PURE__ */ jsx(Dialog, { open, onOpenChange: (next) => !next && onClose(), children: /* @__PURE__ */ jsxs(
316
- DialogContent,
317
- {
318
- ...restoreFocus,
319
- className: "sm:max-w-md",
320
- "data-testid": testIdOr(testId, { testId: "logout-modal" }),
321
- children: [
322
- /* @__PURE__ */ jsxs(DialogHeader, { children: [
323
- /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-3", children: [
324
- /* @__PURE__ */ jsx(LogOut, { className: "h-6 w-6" }),
325
- /* @__PURE__ */ jsx(DialogTitle, { children: l.title })
326
- ] }),
327
- /* @__PURE__ */ jsx(DialogDescription, { className: "text-base", children: canLogoutAll ? l.descriptionAll : l.descriptionThis })
328
- ] }),
329
- /* @__PURE__ */ jsxs(DialogFooter, { className: "gap-2", children: [
330
- /* @__PURE__ */ jsx(
331
- Button,
332
- {
333
- variant: "outline",
334
- onClick: onClose,
335
- "data-testid": testIdOr(testIds?.cancel, { testId: "logout-modal-cancel-button" }),
336
- children: l.cancel
337
- }
338
- ),
339
- canLogoutAll && /* @__PURE__ */ jsx(
340
- Button,
341
- {
342
- variant: "secondary",
343
- onClick: onLogoutAll,
344
- disabled: !isOnline,
345
- title: isOnline ? void 0 : l.offlineTooltip,
346
- "data-testid": testIdOr(testIds?.all, { testId: "logout-modal-all-button" }),
347
- children: l.allSessions
348
- }
349
- ),
350
- /* @__PURE__ */ jsx(
351
- Button,
352
- {
353
- variant: "default",
354
- onClick: onLogoutThis,
355
- "data-testid": testIdOr(testIds?.this, { testId: "logout-modal-this-button" }),
356
- children: l.thisSession
357
- }
358
- )
359
- ] }),
360
- canLogoutAll && !isOnline && /* @__PURE__ */ jsx(
361
- "p",
362
- {
363
- className: "text-sm text-muted-foreground",
364
- "data-testid": testIdOr(testIds?.offlineNote, { testId: "logout-offline-note" }),
365
- children: l.offlineNote
366
- }
367
- ),
368
- sessions.length > 0 && /* @__PURE__ */ jsxs(Collapsible, { open: sessionsOpen, onOpenChange: setSessionsOpen, children: [
369
- /* @__PURE__ */ jsxs(CollapsibleTrigger, { className: "flex w-full items-center gap-2 py-1 text-left transition-opacity hover:opacity-80 pointer-coarse:py-3", children: [
370
- sessionsOpen ? /* @__PURE__ */ jsx(ChevronDown, { className: "h-4 w-4 flex-shrink-0" }) : /* @__PURE__ */ jsx(ChevronRight, { className: "h-4 w-4 flex-shrink-0" }),
371
- /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-1.5 text-sm font-medium text-muted-foreground", children: [
372
- /* @__PURE__ */ jsx(Radio, { className: "h-3 w-3" }),
373
- /* @__PURE__ */ jsx("span", { children: l.activeSessions(sessions.length) })
374
- ] })
375
- ] }),
376
- /* @__PURE__ */ jsx(CollapsibleContent, { children: /* @__PURE__ */ jsx("div", { className: "max-h-48 space-y-1.5 overflow-auto pt-2", children: sessions.map((session) => /* @__PURE__ */ jsx(
377
- SessionRow,
378
- {
379
- session,
380
- icon: renderSessionIcon?.(session.status),
381
- labels: l
382
- },
383
- session.id
384
- )) }) })
385
- ] })
386
- ]
387
- }
388
- ) });
389
- }
390
- var DEFAULT_SETTINGS_DANGER_ZONE_LABELS = {
391
- dangerZone: "Danger Zone"
392
- };
393
- function SettingsPanel({ className, testId, ...props }) {
394
- return /* @__PURE__ */ jsx(
395
- "div",
396
- {
397
- "data-slot": "settings-panel",
398
- "data-testid": testId,
399
- className: cn("mx-auto w-full max-w-xl space-y-6", className),
400
- ...props
401
- }
402
- );
403
- }
404
- function SettingsSection({
405
- icon,
406
- title,
407
- description,
408
- action,
409
- testId,
410
- className,
411
- children,
412
- ...props
413
- }) {
414
- return /* @__PURE__ */ jsxs(
415
- "section",
416
- {
417
- "data-slot": "settings-section",
418
- "data-testid": testId,
419
- className: cn("space-y-3", className),
420
- ...props,
421
- children: [
422
- (title || action) && /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between gap-3", children: [
423
- title && /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
424
- icon && /* @__PURE__ */ jsx("span", { className: "text-muted-foreground [&_svg]:h-4 [&_svg]:w-4", children: icon }),
425
- /* @__PURE__ */ jsx("h2", { className: "text-base font-semibold text-foreground", children: title })
426
- ] }),
427
- action
428
- ] }),
429
- description && /* @__PURE__ */ jsx("p", { className: "text-sm text-muted-foreground", children: description }),
430
- children
431
- ]
432
- }
433
- );
434
- }
435
- function SettingsRow({
436
- label,
437
- labelFor,
438
- description,
439
- children,
440
- testId,
441
- className,
442
- ...props
443
- }) {
444
- return /* @__PURE__ */ jsxs(
445
- "div",
446
- {
447
- "data-slot": "settings-row",
448
- "data-testid": testId,
449
- className: cn(
450
- "flex flex-col gap-2 py-2 @xl:flex-row @xl:items-center @xl:justify-between @xl:gap-6",
451
- className
452
- ),
453
- ...props,
454
- children: [
455
- /* @__PURE__ */ jsxs("div", { className: "min-w-0", children: [
456
- labelFor ? /* @__PURE__ */ jsx("label", { htmlFor: labelFor, className: "text-sm font-medium text-foreground", children: label }) : /* @__PURE__ */ jsx("div", { className: "text-sm font-medium text-foreground", children: label }),
457
- description && /* @__PURE__ */ jsx("div", { className: "text-sm text-muted-foreground", children: description })
458
- ] }),
459
- children && /* @__PURE__ */ jsx("div", { className: "flex shrink-0 items-center gap-2", children })
460
- ]
461
- }
462
- );
463
- }
464
- function SettingsCard({ padding = "md", className, ...props }) {
465
- return /* @__PURE__ */ jsx(
466
- "div",
467
- {
468
- "data-slot": "settings-card",
469
- className: cn(
470
- "rounded-lg bg-muted",
471
- padding === "md" ? "space-y-5 p-5" : "divide-y divide-border p-2",
472
- className
473
- ),
474
- ...props
475
- }
476
- );
477
- }
478
- function SettingsActionRow({ title, description, onClick, testId }) {
479
- return /* @__PURE__ */ jsxs(
480
- "button",
481
- {
482
- type: "button",
483
- onClick,
484
- "data-slot": "settings-action-row",
485
- "data-testid": testId,
486
- className: "flex w-full items-center gap-3 rounded-md px-3 py-3 text-left transition-colors hover:bg-background/60 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring pointer-coarse:min-h-11",
487
- children: [
488
- /* @__PURE__ */ jsxs("div", { className: "min-w-0 flex-1", children: [
489
- /* @__PURE__ */ jsx("div", { className: "text-sm font-semibold text-foreground", children: title }),
490
- description && /* @__PURE__ */ jsx("div", { className: "mt-0.5 text-xs leading-relaxed text-muted-foreground", children: description })
491
- ] }),
492
- /* @__PURE__ */ jsx(ChevronRight, { className: "h-4 w-4 shrink-0 text-muted-foreground" })
493
- ]
494
- }
495
- );
496
- }
497
- function SettingsDangerZone({
498
- isOpen,
499
- onToggle,
500
- label,
501
- title,
502
- description,
503
- action,
504
- labels
505
- }) {
506
- const l = useMemo(() => ({ ...DEFAULT_SETTINGS_DANGER_ZONE_LABELS, ...labels }), [labels]);
507
- return /* @__PURE__ */ jsxs("div", { "data-slot": "settings-danger-zone", className: "mt-8 pt-2", children: [
508
- /* @__PURE__ */ jsxs(
509
- "button",
510
- {
511
- type: "button",
512
- onClick: onToggle,
513
- "aria-expanded": isOpen,
514
- className: "flex w-full items-center gap-1.5 text-left pointer-coarse:min-h-11",
515
- children: [
516
- isOpen ? /* @__PURE__ */ jsx(ChevronDown, { className: "h-3.5 w-3.5 text-muted-foreground" }) : /* @__PURE__ */ jsx(ChevronRight, { className: "h-3.5 w-3.5 text-muted-foreground" }),
517
- /* @__PURE__ */ jsx("p", { className: "text-sm font-medium text-muted-foreground", children: label ?? l.dangerZone })
518
- ]
519
- }
520
- ),
521
- isOpen && /* @__PURE__ */ jsxs("div", { className: "mt-3 flex items-center justify-between gap-4 rounded-lg bg-destructive/5 p-4", children: [
522
- /* @__PURE__ */ jsxs("div", { children: [
523
- /* @__PURE__ */ jsx("p", { className: "font-medium", children: title }),
524
- /* @__PURE__ */ jsx("p", { className: "text-sm text-muted-foreground", children: description })
525
- ] }),
526
- /* @__PURE__ */ jsx("div", { className: "shrink-0", children: action })
527
- ] })
528
- ] });
529
- }
530
84
  function SegmentedControl({
531
85
  value,
532
86
  onChange,
@@ -997,111 +551,6 @@ function WorkOfflineToggle({
997
551
  /* @__PURE__ */ jsx(TooltipContent, { children: /* @__PURE__ */ jsx("p", { children: isOffline ? l.goOnlineHint : l.workOfflineHint }) })
998
552
  ] });
999
553
  }
1000
- function SettingsSwitchRow({
1001
- id,
1002
- title,
1003
- icon,
1004
- description,
1005
- checked,
1006
- onCheckedChange,
1007
- testId,
1008
- disabled,
1009
- className
1010
- }) {
1011
- return /* @__PURE__ */ jsxs(
1012
- "div",
1013
- {
1014
- "data-slot": "settings-switch-row",
1015
- className: cn("flex items-center justify-between gap-4", className),
1016
- children: [
1017
- /* @__PURE__ */ jsxs("div", { className: "min-w-0 flex-1", children: [
1018
- /* @__PURE__ */ jsxs("label", { htmlFor: id, className: "flex items-center gap-2 text-sm font-medium text-foreground", children: [
1019
- icon,
1020
- title
1021
- ] }),
1022
- description && /* @__PURE__ */ jsx("p", { className: "mt-1 text-sm text-muted-foreground", children: description })
1023
- ] }),
1024
- /* @__PURE__ */ jsx(
1025
- Switch,
1026
- {
1027
- id,
1028
- checked,
1029
- onCheckedChange,
1030
- disabled,
1031
- "data-testid": testId
1032
- }
1033
- )
1034
- ]
1035
- }
1036
- );
1037
- }
1038
- function SettingsSwitchGroup({
1039
- className,
1040
- children
1041
- }) {
1042
- return /* @__PURE__ */ jsx(
1043
- "div",
1044
- {
1045
- "data-slot": "settings-switch-group",
1046
- className: cn("ml-6 space-y-4 border-l border-border pl-4", className),
1047
- children
1048
- }
1049
- );
1050
- }
1051
- function NotificationCategoryList({
1052
- masterId,
1053
- masterTitle,
1054
- masterDescription,
1055
- masterChecked,
1056
- onMasterChange,
1057
- masterTestId,
1058
- categories,
1059
- onCategoryChange,
1060
- idPrefix = masterId,
1061
- testIdPrefix
1062
- }) {
1063
- return /* @__PURE__ */ jsxs("div", { "data-slot": "notification-category-list", children: [
1064
- /* @__PURE__ */ jsx(
1065
- SettingsSwitchRow,
1066
- {
1067
- id: masterId,
1068
- title: masterTitle,
1069
- description: masterDescription,
1070
- checked: masterChecked,
1071
- onCheckedChange: onMasterChange,
1072
- testId: testIdOr(masterTestId, { testId: "toggle-email-notifications" })
1073
- }
1074
- ),
1075
- /* @__PURE__ */ jsx("div", { className: "ml-1 mt-3 space-y-3 border-l border-border pl-4 pointer-coarse:mt-5 pointer-coarse:space-y-5", children: categories.map((c) => /* @__PURE__ */ jsxs(
1076
- "label",
1077
- {
1078
- htmlFor: `${idPrefix}-${c.key}`,
1079
- className: cn(
1080
- "flex items-start gap-3 pointer-coarse:min-h-11",
1081
- masterChecked ? "cursor-pointer" : "cursor-not-allowed opacity-50"
1082
- ),
1083
- children: [
1084
- /* @__PURE__ */ jsx(
1085
- Checkbox,
1086
- {
1087
- id: `${idPrefix}-${c.key}`,
1088
- checked: c.checked,
1089
- disabled: !masterChecked,
1090
- onCheckedChange: (value) => onCategoryChange(c.key, value === true),
1091
- "data-testid": prefixedTestId(testIdPrefix, c.key, { testId: `toggle-email-${c.key}` }),
1092
- className: "mt-0.5 size-5 shrink-0"
1093
- }
1094
- ),
1095
- /* @__PURE__ */ jsxs("div", { className: "min-w-0", children: [
1096
- /* @__PURE__ */ jsx("span", { className: "text-sm", children: c.label }),
1097
- /* @__PURE__ */ jsx("p", { className: "mt-0.5 text-xs text-muted-foreground", children: c.description })
1098
- ] })
1099
- ]
1100
- },
1101
- c.key
1102
- )) })
1103
- ] });
1104
- }
1105
554
  var GRID_ACCENT_CLASSES = [
1106
555
  "[&_.ag-checkbox-input-wrapper.ag-checked]:!bg-primary",
1107
556
  "[&_.ag-checkbox-input-wrapper.ag-checked]:!border-primary",
@@ -2746,238 +2195,6 @@ function ReferralCreditNote({
2746
2195
  }
2747
2196
  );
2748
2197
  }
2749
- var DEFAULT_ACTIVE_SESSIONS_DIALOG_LABELS = {
2750
- title: "Active sessions",
2751
- description: "Devices and agents currently signed in to your account. Ending a session signs it out immediately.",
2752
- noSessions: "No active sessions.",
2753
- thisDevice: "This device",
2754
- agent: "Agent",
2755
- endSession: "End this session"
2756
- };
2757
- var DEFAULT_DELETE_ACCOUNT_DIALOG_LABELS = {
2758
- warningTitle: "Delete your account?",
2759
- warningBefore: "Once deleted, your account will be ",
2760
- warningEmphasis: "immediately closed and you will be logged out",
2761
- warningAfter: ". This action cannot be undone.",
2762
- blockersHeading: "You must resolve these first:",
2763
- cancel: "Cancel",
2764
- continue: "Continue",
2765
- confirmTitle: "Confirm account deletion",
2766
- confirmDescription: "Type your email address to confirm. Your account will be closed immediately and you will be logged out.",
2767
- yourEmail: "Your email",
2768
- back: "Back",
2769
- deleting: "Deleting...",
2770
- deleteAccount: "Delete Account"
2771
- };
2772
- function SessionListRow({
2773
- session,
2774
- onTerminate,
2775
- labels,
2776
- testIds
2777
- }) {
2778
- return /* @__PURE__ */ jsxs(
2779
- "div",
2780
- {
2781
- className: "flex w-full items-center gap-3 border-b border-border/60 px-4 py-3 last:border-b-0",
2782
- "data-testid": prefixedTestId(testIds?.sessionItem, session.id, {
2783
- testId: `session-item-${session.id}`
2784
- }),
2785
- children: [
2786
- /* @__PURE__ */ jsx("span", { className: "flex size-9 shrink-0 items-center justify-center rounded-full bg-muted", children: session.icon }),
2787
- /* @__PURE__ */ jsxs("div", { className: "min-w-0 flex-1", children: [
2788
- /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
2789
- /* @__PURE__ */ jsx("span", { className: "truncate text-sm font-semibold text-foreground", children: session.name }),
2790
- session.isCurrent && /* @__PURE__ */ jsx(Badge, { className: "border-transparent bg-accent px-1.5 py-0 text-xs text-accent-foreground shadow-none hover:bg-accent", children: labels.thisDevice }),
2791
- session.isAgent && /* @__PURE__ */ jsx(Badge, { variant: "default", className: "px-1 py-0 text-xs", children: labels.agent })
2792
- ] }),
2793
- /* @__PURE__ */ jsx("div", { className: "mt-0.5 truncate text-xs text-muted-foreground", children: session.detail })
2794
- ] }),
2795
- !session.isCurrent && /* @__PURE__ */ jsxs(Tooltip, { children: [
2796
- /* @__PURE__ */ jsx(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsx(
2797
- Button,
2798
- {
2799
- type: "button",
2800
- variant: "ghost",
2801
- size: "icon",
2802
- className: "h-8 w-8 shrink-0 text-muted-foreground hover:text-destructive",
2803
- "aria-label": labels.endSession,
2804
- onClick: () => onTerminate(session.id),
2805
- disabled: session.isTerminating,
2806
- "data-testid": prefixedTestId(
2807
- testIds?.terminateSession,
2808
- session.id,
2809
- { testId: `terminate-session-${session.id}-button` },
2810
- "-button"
2811
- ),
2812
- children: session.isTerminating ? /* @__PURE__ */ jsx(Loader2, { className: "h-4 w-4 animate-spin" }) : /* @__PURE__ */ jsx(LogOut, { className: "h-4 w-4" })
2813
- }
2814
- ) }),
2815
- /* @__PURE__ */ jsx(TooltipContent, { children: labels.endSession })
2816
- ] })
2817
- ]
2818
- }
2819
- );
2820
- }
2821
- function ActiveSessionsDialog({
2822
- open,
2823
- onOpenChange,
2824
- isLoading,
2825
- sessions,
2826
- onTerminate,
2827
- labels,
2828
- testId,
2829
- testIds
2830
- }) {
2831
- const l = useMemo(() => ({ ...DEFAULT_ACTIVE_SESSIONS_DIALOG_LABELS, ...labels }), [labels]);
2832
- return /* @__PURE__ */ jsx(Dialog, { open, onOpenChange, children: /* @__PURE__ */ jsxs(
2833
- DialogContent,
2834
- {
2835
- presentation: "sheet",
2836
- className: "sm:max-w-lg",
2837
- "data-testid": testIdOr(testId, { testId: "active-sessions-dialog" }),
2838
- children: [
2839
- /* @__PURE__ */ jsxs(DialogHeader, { children: [
2840
- /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-3", children: [
2841
- /* @__PURE__ */ jsx(Radio, { className: "h-6 w-6" }),
2842
- /* @__PURE__ */ jsx(DialogTitle, { children: l.title })
2843
- ] }),
2844
- /* @__PURE__ */ jsx(DialogDescription, { children: l.description })
2845
- ] }),
2846
- isLoading ? /* @__PURE__ */ jsx("div", { className: "flex justify-center py-8", children: /* @__PURE__ */ jsx(Loader2, { className: "h-5 w-5 animate-spin text-muted-foreground" }) }) : sessions.length === 0 ? /* @__PURE__ */ jsx("p", { className: "py-4 text-center text-sm text-muted-foreground", children: l.noSessions }) : /* @__PURE__ */ jsx(
2847
- "div",
2848
- {
2849
- className: "-mx-2 max-h-96 overflow-auto rounded-lg bg-muted",
2850
- "data-testid": testIdOr(testIds?.list, { testId: "session-list" }),
2851
- children: sessions.map((session) => /* @__PURE__ */ jsx(
2852
- SessionListRow,
2853
- {
2854
- session,
2855
- onTerminate,
2856
- labels: l,
2857
- testIds
2858
- },
2859
- session.id
2860
- ))
2861
- }
2862
- )
2863
- ]
2864
- }
2865
- ) });
2866
- }
2867
- function DeleteAccountDialog({
2868
- open,
2869
- onClose,
2870
- step,
2871
- blockers,
2872
- onContinue,
2873
- onBack,
2874
- userEmail,
2875
- confirmEmail,
2876
- onConfirmEmailChange,
2877
- isDeleting,
2878
- onSubmit,
2879
- labels,
2880
- testId,
2881
- testIds
2882
- }) {
2883
- const confirmEmailId = useId();
2884
- const l = useMemo(() => ({ ...DEFAULT_DELETE_ACCOUNT_DIALOG_LABELS, ...labels }), [labels]);
2885
- const emailMatches = confirmEmail.toLowerCase() === userEmail.toLowerCase();
2886
- return /* @__PURE__ */ jsx(Dialog, { open, onOpenChange: onClose, children: /* @__PURE__ */ jsx(
2887
- DialogContent,
2888
- {
2889
- presentation: "sheet",
2890
- className: "sm:max-w-md",
2891
- "data-testid": testIdOr(testId, { testId: "delete-account-dialog" }),
2892
- children: step === "warning" ? /* @__PURE__ */ jsxs(Fragment, { children: [
2893
- /* @__PURE__ */ jsxs(DialogHeader, { children: [
2894
- /* @__PURE__ */ jsxs(DialogTitle, { className: "flex items-center gap-2", children: [
2895
- /* @__PURE__ */ jsx(AlertTriangle, { className: "h-5 w-5 text-destructive" }),
2896
- l.warningTitle
2897
- ] }),
2898
- /* @__PURE__ */ jsxs(DialogDescription, { children: [
2899
- l.warningBefore,
2900
- /* @__PURE__ */ jsx("strong", { children: l.warningEmphasis }),
2901
- l.warningAfter
2902
- ] })
2903
- ] }),
2904
- blockers.length > 0 && /* @__PURE__ */ jsxs("div", { className: "rounded-md bg-yellow-bg p-3 text-sm text-yellow-text", children: [
2905
- /* @__PURE__ */ jsx("p", { className: "mb-1 font-semibold", children: l.blockersHeading }),
2906
- /* @__PURE__ */ jsx("ul", { className: "list-inside list-disc space-y-1", children: blockers.map((blocker) => /* @__PURE__ */ jsx("li", { children: blocker.content }, blocker.key)) })
2907
- ] }),
2908
- /* @__PURE__ */ jsxs("div", { className: "flex flex-col-reverse sm:flex-row sm:justify-end gap-2 pt-2", children: [
2909
- /* @__PURE__ */ jsx(
2910
- Button,
2911
- {
2912
- variant: "outline",
2913
- onClick: onClose,
2914
- "data-testid": testIdOr(testIds?.cancel, { testId: "delete-account-cancel-button" }),
2915
- children: l.cancel
2916
- }
2917
- ),
2918
- /* @__PURE__ */ jsx(
2919
- Button,
2920
- {
2921
- variant: "destructive",
2922
- disabled: blockers.length > 0,
2923
- onClick: onContinue,
2924
- "data-testid": testIdOr(testIds?.continue, {
2925
- testId: "delete-account-continue-button"
2926
- }),
2927
- children: l.continue
2928
- }
2929
- )
2930
- ] })
2931
- ] }) : /* @__PURE__ */ jsxs(Fragment, { children: [
2932
- /* @__PURE__ */ jsxs(DialogHeader, { children: [
2933
- /* @__PURE__ */ jsx(DialogTitle, { children: l.confirmTitle }),
2934
- /* @__PURE__ */ jsx(DialogDescription, { children: l.confirmDescription })
2935
- ] }),
2936
- /* @__PURE__ */ jsxs("div", { children: [
2937
- /* @__PURE__ */ jsx("label", { htmlFor: confirmEmailId, className: "mb-1 block text-sm font-medium", children: l.yourEmail }),
2938
- /* @__PURE__ */ jsx(
2939
- Input,
2940
- {
2941
- id: confirmEmailId,
2942
- type: "email",
2943
- placeholder: userEmail,
2944
- value: confirmEmail,
2945
- onChange: (e) => onConfirmEmailChange(e.target.value),
2946
- autoFocus: true,
2947
- "data-testid": testIdOr(testIds?.emailInput, {
2948
- testId: "delete-account-email-input"
2949
- })
2950
- }
2951
- )
2952
- ] }),
2953
- /* @__PURE__ */ jsxs("div", { className: "flex flex-col-reverse sm:flex-row sm:justify-end gap-2 pt-2", children: [
2954
- /* @__PURE__ */ jsx(
2955
- Button,
2956
- {
2957
- variant: "outline",
2958
- onClick: onBack,
2959
- "data-testid": testIdOr(testIds?.back, { testId: "delete-account-back-button" }),
2960
- children: l.back
2961
- }
2962
- ),
2963
- /* @__PURE__ */ jsx(
2964
- Button,
2965
- {
2966
- variant: "destructive",
2967
- disabled: !emailMatches || isDeleting,
2968
- onClick: onSubmit,
2969
- "data-testid": testIdOr(testIds?.submit, { testId: "delete-account-submit-button" }),
2970
- children: isDeleting ? /* @__PURE__ */ jsxs(Fragment, { children: [
2971
- /* @__PURE__ */ jsx(Loader2, { className: "mr-2 h-4 w-4 animate-spin" }),
2972
- l.deleting
2973
- ] }) : l.deleteAccount
2974
- }
2975
- )
2976
- ] })
2977
- ] })
2978
- }
2979
- ) });
2980
- }
2981
2198
  var DEFAULT_CONNECTION_CARD_LABELS = {
2982
2199
  connectedAs: (identity) => `Connected as ${identity}`,
2983
2200
  justConnected: "Just connected \u2713",
@@ -3095,82 +2312,6 @@ function ConnectionsError({ message }) {
3095
2312
  /* @__PURE__ */ jsx("span", { children: message })
3096
2313
  ] });
3097
2314
  }
3098
- var DEFAULT_AVATAR_PICKER_LABELS = {
3099
- uploadingPicture: "Uploading picture",
3100
- changeProfilePicture: "Change profile picture",
3101
- change: "Change"
3102
- };
3103
- function AvatarPicker({
3104
- pictureUrl,
3105
- initials,
3106
- fallbackClassName,
3107
- isUploading,
3108
- disabled,
3109
- onFileChosen,
3110
- testId = "avatar-uploader-input",
3111
- labels
3112
- }) {
3113
- const l = useMemo(() => ({ ...DEFAULT_AVATAR_PICKER_LABELS, ...labels }), [labels]);
3114
- const fileInputRef = useRef(null);
3115
- const handleChange = (e) => {
3116
- const file = e.target.files?.[0];
3117
- e.target.value = "";
3118
- if (file) onFileChosen(file);
3119
- };
3120
- return /* @__PURE__ */ jsxs("div", { "data-slot": "avatar-picker", className: "group/avatar relative shrink-0", children: [
3121
- /* @__PURE__ */ jsxs(Avatar, { className: "h-20 w-20 ring-1 ring-border", children: [
3122
- pictureUrl && /* @__PURE__ */ jsx(AvatarImage, { src: pictureUrl, alt: initials }),
3123
- /* @__PURE__ */ jsx(
3124
- AvatarFallback,
3125
- {
3126
- className: cn("text-2xl font-semibold leading-none text-white", fallbackClassName),
3127
- children: initials
3128
- }
3129
- )
3130
- ] }),
3131
- /* @__PURE__ */ jsx(
3132
- "button",
3133
- {
3134
- type: "button",
3135
- onClick: () => fileInputRef.current?.click(),
3136
- disabled: disabled || isUploading,
3137
- className: cn(
3138
- "absolute inset-0 flex items-center justify-center rounded-full",
3139
- "bg-foreground/70 text-background",
3140
- "opacity-0 focus-visible:opacity-100 group-hover/avatar:opacity-100",
3141
- // Touch has no hover: keep the change affordance visible (lighter scrim over the photo).
3142
- "pointer-coarse:opacity-100",
3143
- "transition-opacity duration-200",
3144
- "disabled:cursor-not-allowed disabled:opacity-100"
3145
- ),
3146
- "aria-label": isUploading ? l.uploadingPicture : l.changeProfilePicture,
3147
- children: isUploading ? /* @__PURE__ */ jsx(Loader2, { className: "h-6 w-6 animate-spin" }) : /* @__PURE__ */ jsxs("div", { className: "flex flex-col items-center gap-0.5", children: [
3148
- /* @__PURE__ */ jsx(Camera, { className: "h-5 w-5" }),
3149
- /* @__PURE__ */ jsx("span", { className: "text-xs font-medium", children: l.change })
3150
- ] })
3151
- }
3152
- ),
3153
- /* @__PURE__ */ jsx(
3154
- "span",
3155
- {
3156
- "aria-hidden": "true",
3157
- className: "pointer-events-none absolute -bottom-1 -right-1 flex h-7 w-7 items-center justify-center rounded-full bg-background text-muted-foreground ring-1 ring-border",
3158
- children: /* @__PURE__ */ jsx(Camera, { className: "h-3.5 w-3.5" })
3159
- }
3160
- ),
3161
- /* @__PURE__ */ jsx(
3162
- "input",
3163
- {
3164
- ref: fileInputRef,
3165
- type: "file",
3166
- accept: "image/png,image/jpeg,image/webp,image/gif",
3167
- onChange: handleChange,
3168
- className: "hidden",
3169
- "data-testid": testId
3170
- }
3171
- )
3172
- ] });
3173
- }
3174
2315
  var DEFAULT_PROJECT_LIST_LABELS = {
3175
2316
  loading: "Loading projects...",
3176
2317
  empty: "No projects yet. Create one to get started.",
@@ -4084,210 +3225,6 @@ function ProjectCardView({
4084
3225
  }
4085
3226
  );
4086
3227
  }
4087
- var DEFAULT_PROFILE_CARD_LABELS = {
4088
- firstName: "First name",
4089
- lastName: "Last name",
4090
- save: "Save",
4091
- cancel: "Cancel",
4092
- sso: "SSO",
4093
- ssoTooltip: "Your email is managed by your sign-in provider. Change it there and it will sync here automatically on your next sign-in.",
4094
- change: "Change",
4095
- newEmailAddress: "New email address",
4096
- emailPlaceholder: "you@example.com",
4097
- codeWillBeSent: "We\u2019ll send a 3-word verification code to this address.",
4098
- sendCode: "Send code",
4099
- verify: (email) => `Verify ${email}`,
4100
- codePlaceholder: "WORD-WORD-WORD",
4101
- enterCodeHint: "Enter the 3-word code from the email we just sent.",
4102
- confirm: "Confirm",
4103
- resendIn: (seconds) => `Resend in ${seconds}s`,
4104
- resendCode: "Resend code"
4105
- };
4106
- function ProfileCard({
4107
- avatar,
4108
- name,
4109
- email,
4110
- isSso,
4111
- onStartEmailChange,
4112
- emailChange,
4113
- ssoTooltip,
4114
- labels
4115
- }) {
4116
- const l = useMemo(() => ({ ...DEFAULT_PROFILE_CARD_LABELS, ...labels }), [labels]);
4117
- return /* @__PURE__ */ jsxs(SettingsCard, { children: [
4118
- /* @__PURE__ */ jsxs("div", { className: "flex items-start gap-5", children: [
4119
- avatar,
4120
- /* @__PURE__ */ jsxs("div", { className: "min-w-0 flex-1 space-y-3", children: [
4121
- name.isEditing ? /* @__PURE__ */ jsxs("div", { className: "space-y-2", children: [
4122
- /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-2 @xl:flex-row", children: [
4123
- /* @__PURE__ */ jsx(
4124
- Input,
4125
- {
4126
- value: name.givenName,
4127
- onChange: (e) => name.onGivenNameChange(e.target.value),
4128
- placeholder: l.firstName,
4129
- className: "flex-1",
4130
- autoFocus: true
4131
- }
4132
- ),
4133
- /* @__PURE__ */ jsx(
4134
- Input,
4135
- {
4136
- value: name.familyName,
4137
- onChange: (e) => name.onFamilyNameChange(e.target.value),
4138
- placeholder: l.lastName,
4139
- className: "flex-1"
4140
- }
4141
- )
4142
- ] }),
4143
- /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
4144
- /* @__PURE__ */ jsxs(
4145
- Button,
4146
- {
4147
- onClick: name.onSave,
4148
- size: "sm",
4149
- disabled: !name.givenName.trim() || name.isSaving,
4150
- children: [
4151
- name.isSaving ? /* @__PURE__ */ jsx(Loader2, { className: "mr-1 h-4 w-4 animate-spin" }) : /* @__PURE__ */ jsx(Check, { className: "mr-1 h-4 w-4" }),
4152
- l.save
4153
- ]
4154
- }
4155
- ),
4156
- /* @__PURE__ */ jsx(Button, { onClick: name.onCancel, size: "sm", variant: "ghost", disabled: name.isSaving, children: l.cancel })
4157
- ] })
4158
- ] }) : /* @__PURE__ */ jsx(
4159
- "button",
4160
- {
4161
- type: "button",
4162
- onClick: name.onStartEdit,
4163
- className: "-mx-2 w-full rounded-md px-2 py-1 text-left transition-colors hover:bg-background/60 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring pointer-coarse:min-h-11",
4164
- children: /* @__PURE__ */ jsxs("div", { className: "flex min-w-0 items-center gap-2", children: [
4165
- /* @__PURE__ */ jsx("span", { className: "min-w-0 flex-1 truncate font-heading text-xl font-semibold text-foreground", children: name.display }),
4166
- /* @__PURE__ */ jsx(Pencil, { className: "h-3.5 w-3.5 shrink-0 text-muted-foreground" })
4167
- ] })
4168
- }
4169
- ),
4170
- !emailChange && /* @__PURE__ */ jsxs("div", { className: "-mx-2 flex min-w-0 items-center gap-2 px-2 py-1", children: [
4171
- /* @__PURE__ */ jsx(Mail, { className: "h-3.5 w-3.5 shrink-0 text-muted-foreground" }),
4172
- /* @__PURE__ */ jsx("span", { className: "min-w-0 flex-1 truncate text-sm text-muted-foreground", children: email }),
4173
- isSso ? /* @__PURE__ */ jsxs(Tooltip, { children: [
4174
- /* @__PURE__ */ jsx(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsx(
4175
- "span",
4176
- {
4177
- className: "ml-1 shrink-0 cursor-help rounded bg-background px-1.5 py-0.5 text-xs font-medium text-muted-foreground",
4178
- tabIndex: 0,
4179
- children: l.sso
4180
- }
4181
- ) }),
4182
- /* @__PURE__ */ jsx(TooltipContent, { className: "max-w-xs", children: ssoTooltip ?? l.ssoTooltip })
4183
- ] }) : /* @__PURE__ */ jsx(
4184
- "button",
4185
- {
4186
- type: "button",
4187
- onClick: onStartEmailChange,
4188
- className: "ml-auto shrink-0 text-xs font-medium text-primary hover:underline pointer-coarse:min-h-11",
4189
- children: l.change
4190
- }
4191
- )
4192
- ] })
4193
- ] })
4194
- ] }),
4195
- emailChange && !isSso && /* @__PURE__ */ jsx("div", { className: "animate-accordion-down overflow-hidden", children: /* @__PURE__ */ jsx("div", { className: "space-y-3 rounded-lg bg-background p-4", children: emailChange.step === "enter" ? /* @__PURE__ */ jsxs(Fragment, { children: [
4196
- /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2 text-xs font-medium text-muted-foreground", children: [
4197
- /* @__PURE__ */ jsx(Mail, { className: "h-3.5 w-3.5" }),
4198
- l.newEmailAddress
4199
- ] }),
4200
- /* @__PURE__ */ jsx(
4201
- Input,
4202
- {
4203
- type: "email",
4204
- value: emailChange.newEmail,
4205
- onChange: (e) => emailChange.onNewEmailChange(e.target.value),
4206
- placeholder: l.emailPlaceholder,
4207
- autoFocus: true
4208
- }
4209
- ),
4210
- /* @__PURE__ */ jsx("p", { className: "text-xs text-muted-foreground", children: l.codeWillBeSent }),
4211
- /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2 pt-1", children: [
4212
- /* @__PURE__ */ jsxs(
4213
- Button,
4214
- {
4215
- onClick: emailChange.onSendCode,
4216
- size: "sm",
4217
- disabled: !emailChange.newEmail.trim() || emailChange.isSending,
4218
- children: [
4219
- emailChange.isSending ? /* @__PURE__ */ jsx(Loader2, { className: "mr-1 h-4 w-4 animate-spin" }) : /* @__PURE__ */ jsx(Mail, { className: "mr-1 h-4 w-4" }),
4220
- l.sendCode
4221
- ]
4222
- }
4223
- ),
4224
- /* @__PURE__ */ jsx(
4225
- Button,
4226
- {
4227
- onClick: emailChange.onCancel,
4228
- size: "sm",
4229
- variant: "ghost",
4230
- disabled: emailChange.isSending,
4231
- children: l.cancel
4232
- }
4233
- )
4234
- ] })
4235
- ] }) : /* @__PURE__ */ jsxs(Fragment, { children: [
4236
- /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2 text-xs font-medium text-muted-foreground", children: [
4237
- /* @__PURE__ */ jsx(Mail, { className: "h-3.5 w-3.5" }),
4238
- l.verify(emailChange.newEmail)
4239
- ] }),
4240
- /* @__PURE__ */ jsx(
4241
- Input,
4242
- {
4243
- value: emailChange.code,
4244
- onChange: (e) => emailChange.onCodeChange(e.target.value.toUpperCase().replace(/\s+/g, "-")),
4245
- className: cn("text-center font-mono tracking-wider"),
4246
- placeholder: l.codePlaceholder,
4247
- autoFocus: true
4248
- }
4249
- ),
4250
- /* @__PURE__ */ jsx("p", { className: "text-xs text-muted-foreground", children: l.enterCodeHint }),
4251
- /* @__PURE__ */ jsxs("div", { className: "flex flex-wrap items-center gap-2 pt-1", children: [
4252
- /* @__PURE__ */ jsxs(
4253
- Button,
4254
- {
4255
- onClick: emailChange.onConfirm,
4256
- size: "sm",
4257
- disabled: !emailChange.code.trim() || emailChange.isConfirming,
4258
- children: [
4259
- emailChange.isConfirming ? /* @__PURE__ */ jsx(Loader2, { className: "mr-1 h-4 w-4 animate-spin" }) : /* @__PURE__ */ jsx(Check, { className: "mr-1 h-4 w-4" }),
4260
- l.confirm
4261
- ]
4262
- }
4263
- ),
4264
- /* @__PURE__ */ jsx(
4265
- Button,
4266
- {
4267
- onClick: () => {
4268
- if (emailChange.cooldownSeconds > 0) return;
4269
- emailChange.onSendCode();
4270
- },
4271
- size: "sm",
4272
- variant: "ghost",
4273
- disabled: emailChange.cooldownSeconds > 0 || emailChange.isSending,
4274
- children: emailChange.cooldownSeconds > 0 ? l.resendIn(emailChange.cooldownSeconds) : l.resendCode
4275
- }
4276
- ),
4277
- /* @__PURE__ */ jsx(
4278
- Button,
4279
- {
4280
- onClick: emailChange.onCancel,
4281
- size: "sm",
4282
- variant: "ghost",
4283
- disabled: emailChange.isConfirming,
4284
- children: l.cancel
4285
- }
4286
- )
4287
- ] })
4288
- ] }) }) })
4289
- ] });
4290
- }
4291
3228
  var DEFAULT_EMAIL_WORKSPACE_DIALOG_LABELS = {
4292
3229
  title: "Email this workspace",
4293
3230
  description: "Send documents and questions here from your registered email address \u2014 your Assistant reads the email and replies.",
@@ -4919,6 +3856,6 @@ function ErrorDialogView({
4919
3856
  ) });
4920
3857
  }
4921
3858
 
4922
- export { ActiveSessionsDialog, AvatarPicker, CONVERSATION_TITLE_MAX, CheckoutDialogFrame, ConfigSwitcherBar, ConfirmDialog, ConnectionCard, ConnectionsEmpty, ConnectionsError, ConnectionsLoading, ConversationTitleSection, CreditsGlyph, DEFAULT_ACTIVE_SESSIONS_DIALOG_LABELS, DEFAULT_AVATAR_PICKER_LABELS, DEFAULT_CHECKOUT_DIALOG_LABELS, DEFAULT_CONFIG_SWITCHER_BAR_LABELS, DEFAULT_CONFIRM_DIALOG_LABELS, DEFAULT_CONNECTION_CARD_LABELS, DEFAULT_CONVERSATION_TITLE_SECTION_LABELS, DEFAULT_DAILY_CAP_FIELD_LABELS, DEFAULT_DELETE_ACCOUNT_DIALOG_LABELS, DEFAULT_DOCUMENT_PICKER_LABELS, DEFAULT_EMAIL_WORKSPACE_DIALOG_LABELS, DEFAULT_ERROR_DIALOG_LABELS, DEFAULT_INLINE_NAME_EDITOR_LABELS, DEFAULT_INVITE_CONTACTS_DIALOG_LABELS, DEFAULT_INVOICES_DIALOG_LABELS, DEFAULT_LOGOUT_DIALOG_LABELS, DEFAULT_MEMBER_PROJECT_ROW_LABELS, DEFAULT_MODEL_SELECTION_SECTION_LABELS, DEFAULT_PASSWORD_CHANGE_DIALOG_LABELS, DEFAULT_PLAN_CARD_LABELS, DEFAULT_PROFILE_CARD_LABELS, DEFAULT_PROJECT_CARD_VIEW_LABELS, DEFAULT_PROJECT_DETAIL_HEADER_LABELS, DEFAULT_PROJECT_LIST_LABELS, DEFAULT_QUOTA_EXCEEDED_DIALOG_LABELS, DEFAULT_REFERRAL_CREDIT_LABELS, DEFAULT_RENAME_DIALOG_LABELS, DEFAULT_SETTINGS_DANGER_ZONE_LABELS, DEFAULT_SHARED_PROJECTS_SECTION_LABELS, DEFAULT_SUBSCRIPTION_SECTION_LABELS, DEFAULT_SUBSCRIPTION_STATUS_LABELS, DEFAULT_SUPPORT_PANEL_LABELS, DEFAULT_SYNC_DIALOG_FOOTER_LABELS, DEFAULT_SYNC_FOLDER_ROW_LABELS, DEFAULT_TIPS_EDITOR_LABELS, DEFAULT_TRI_STATE_FILTER_MENU_LABELS, DEFAULT_USAGE_LINE_CHART_LABELS, DEFAULT_USAGE_PANEL_LABELS, DEFAULT_USAGE_PROPORTION_BAR_LABELS, DEFAULT_WELCOME_DIALOG_LABELS, DEFAULT_WORK_OFFLINE_LABELS, DailyCapField, DeleteAccountDialog, DocumentPicker, EmailWorkspaceDialogView, ErrorDialogView, FloatingPanel, InlineNameEditor, InviteContactsDialog, InvoicesDialog, JsonTree, LogoutDialog, MemberProjectRow, ModelProviderLabel, ModelSelectionSection, NotificationCategoryList, PanelActionsRow, PanelAddButton, PanelFrame, PanelFrameBody, PanelNote, PanelScroll, PanelTitleBar, PasswordChangeDialog, PlanActionButton, PlanActionRow, PlanBadge, PlanCard, PlanCardGrid, PlanDialogFrame, PlanInfoPopover, PlanNotice, PlanPickerCard, PlanPickerHeader, PlanStack, PlanTierOption, PlanTransition, PremiumModelsFrame, PricingToggle, ProfileCard, ProjectCardView, ProjectDetailHeader, ProjectDetailSection, ProjectGroup, ProjectList, ProjectNameLabel, ProjectPlanPicker, ProjectRow, ProjectRowActions, PromoCodeInput, QuotaExceededDialogView, QuotaMeter, ReferralCreditBadge, ReferralCreditNote, ReferralCreditSummary, RenameDialog, RowButton, RowIconAction, SegmentedControl, ServerConnectionButton, SettingsActionRow, SettingsCard, SettingsDangerZone, SettingsPanel, SettingsRow, SettingsSection, SettingsSwitchGroup, SettingsSwitchRow, SharedProjectRow, SharedProjectsSection, SubscriptionSectionView, SubscriptionStatusView, SupportPanel, SupportUnavailable, SyncCheckList, SyncDialogBody, SyncDialogFooter, SyncField, SyncFolderRow, SyncFolderStatus, SyncLinkButton, SyncLinkRow, SyncLoading, SyncNote, SyncOptionToggle, SyncOptions, SyncReconnectNotice, SyncSelect, SyncSmallNote, SyncTreeFrame, ThreadPreviewDialog, TipsEditorDialog, TriStateFilterMenu, UsageActionButton, UsageLegend, UsageLineChart, UsagePanel, UsageProportionBar, UsageQuotaHint, UsageSection, UsageSummary, UsageToggle, WelcomeDialog, WelcomeProjectPicker, WorkOfflineToggle };
3859
+ export { CONVERSATION_TITLE_MAX, CheckoutDialogFrame, ConfigSwitcherBar, ConfirmDialog, ConnectionCard, ConnectionsEmpty, ConnectionsError, ConnectionsLoading, ConversationTitleSection, CreditsGlyph, DEFAULT_CHECKOUT_DIALOG_LABELS, DEFAULT_CONFIG_SWITCHER_BAR_LABELS, DEFAULT_CONFIRM_DIALOG_LABELS, DEFAULT_CONNECTION_CARD_LABELS, DEFAULT_CONVERSATION_TITLE_SECTION_LABELS, DEFAULT_DAILY_CAP_FIELD_LABELS, DEFAULT_DOCUMENT_PICKER_LABELS, DEFAULT_EMAIL_WORKSPACE_DIALOG_LABELS, DEFAULT_ERROR_DIALOG_LABELS, DEFAULT_INLINE_NAME_EDITOR_LABELS, DEFAULT_INVITE_CONTACTS_DIALOG_LABELS, DEFAULT_INVOICES_DIALOG_LABELS, DEFAULT_MEMBER_PROJECT_ROW_LABELS, DEFAULT_MODEL_SELECTION_SECTION_LABELS, DEFAULT_PLAN_CARD_LABELS, DEFAULT_PROJECT_CARD_VIEW_LABELS, DEFAULT_PROJECT_DETAIL_HEADER_LABELS, DEFAULT_PROJECT_LIST_LABELS, DEFAULT_QUOTA_EXCEEDED_DIALOG_LABELS, DEFAULT_REFERRAL_CREDIT_LABELS, DEFAULT_RENAME_DIALOG_LABELS, DEFAULT_SHARED_PROJECTS_SECTION_LABELS, DEFAULT_SUBSCRIPTION_SECTION_LABELS, DEFAULT_SUBSCRIPTION_STATUS_LABELS, DEFAULT_SUPPORT_PANEL_LABELS, DEFAULT_SYNC_DIALOG_FOOTER_LABELS, DEFAULT_SYNC_FOLDER_ROW_LABELS, DEFAULT_TIPS_EDITOR_LABELS, DEFAULT_TRI_STATE_FILTER_MENU_LABELS, DEFAULT_USAGE_LINE_CHART_LABELS, DEFAULT_USAGE_PANEL_LABELS, DEFAULT_USAGE_PROPORTION_BAR_LABELS, DEFAULT_WELCOME_DIALOG_LABELS, DEFAULT_WORK_OFFLINE_LABELS, DailyCapField, DocumentPicker, EmailWorkspaceDialogView, ErrorDialogView, FloatingPanel, InlineNameEditor, InviteContactsDialog, InvoicesDialog, JsonTree, MemberProjectRow, ModelProviderLabel, ModelSelectionSection, PanelActionsRow, PanelAddButton, PanelFrame, PanelFrameBody, PanelNote, PanelScroll, PanelTitleBar, PlanActionButton, PlanActionRow, PlanBadge, PlanCard, PlanCardGrid, PlanDialogFrame, PlanInfoPopover, PlanNotice, PlanPickerCard, PlanPickerHeader, PlanStack, PlanTierOption, PlanTransition, PremiumModelsFrame, PricingToggle, ProjectCardView, ProjectDetailHeader, ProjectDetailSection, ProjectGroup, ProjectList, ProjectNameLabel, ProjectPlanPicker, ProjectRow, ProjectRowActions, PromoCodeInput, QuotaExceededDialogView, QuotaMeter, ReferralCreditBadge, ReferralCreditNote, ReferralCreditSummary, RenameDialog, RowButton, RowIconAction, SegmentedControl, ServerConnectionButton, SharedProjectRow, SharedProjectsSection, SubscriptionSectionView, SubscriptionStatusView, SupportPanel, SupportUnavailable, SyncCheckList, SyncDialogBody, SyncDialogFooter, SyncField, SyncFolderRow, SyncFolderStatus, SyncLinkButton, SyncLinkRow, SyncLoading, SyncNote, SyncOptionToggle, SyncOptions, SyncReconnectNotice, SyncSelect, SyncSmallNote, SyncTreeFrame, ThreadPreviewDialog, TipsEditorDialog, TriStateFilterMenu, UsageActionButton, UsageLegend, UsageLineChart, UsagePanel, UsageProportionBar, UsageQuotaHint, UsageSection, UsageSummary, UsageToggle, WelcomeDialog, WelcomeProjectPicker, WorkOfflineToggle };
4923
3860
  //# sourceMappingURL=index.js.map
4924
3861
  //# sourceMappingURL=index.js.map