From 712a6b15e62d40862b56f1f684475b7c806f8284 Mon Sep 17 00:00:00 2001 From: Joshen Lim Date: Wed, 6 Aug 2025 11:22:45 +0700 Subject: [PATCH 1/9] Chore/address danny friction log (#37659) * Standardize more icons for table editor and storage explorer * Standardize AI perms button CTA copy * Improve toast error copy for invalid folder name * Storage, open folder when its created * Highlight FileExplorerRowEditItem when there's issues with name * Adding a new folder, remove new row if onBlur and folder name has issues * Update tabel editor header action Auth policy -> RLS policy * Add dialog if navigating away from custom report while there's unsaved changes * Add cmd s shortcut to save snippet in SQL editor * Add toggling of favorite to context menu in sql editor * Update save query label * Fix SqlRunButton missing prop hasSelection for SQL editor --- .../components/interfaces/Reports/Reports.tsx | 315 ++++++++++-------- .../interfaces/SQLEditor/MonacoEditor.tsx | 11 + .../SQLEditor/UtilityPanel/RunButton.tsx | 3 +- .../SQLEditor/UtilityPanel/UtilityActions.tsx | 7 +- .../Storage/StorageExplorer/FileExplorer.tsx | 5 +- .../StorageExplorer/FileExplorerColumn.tsx | 5 +- .../StorageExplorer/FileExplorerRow.tsx | 31 +- .../FileExplorerRowEditing.tsx | 14 +- .../StorageExplorer/StorageExplorer.tsx | 1 - .../TableGridEditor/GridHeaderActions.tsx | 2 +- .../SQLEditorNavV2/SQLEditorTreeViewItem.tsx | 36 +- apps/studio/state/storage-explorer.tsx | 36 +- 12 files changed, 286 insertions(+), 180 deletions(-) diff --git a/apps/studio/components/interfaces/Reports/Reports.tsx b/apps/studio/components/interfaces/Reports/Reports.tsx index 044d4e73534ce..1bd29985dff80 100644 --- a/apps/studio/components/interfaces/Reports/Reports.tsx +++ b/apps/studio/components/interfaces/Reports/Reports.tsx @@ -3,6 +3,7 @@ import { useQueryClient } from '@tanstack/react-query' import dayjs from 'dayjs' import { groupBy, isEqual, isNull } from 'lodash' import { ArrowRight, Plus, RefreshCw, Save } from 'lucide-react' +import { useRouter } from 'next/router' import { DragEvent, useEffect, useState } from 'react' import { toast } from 'sonner' @@ -30,6 +31,7 @@ import { useProfile } from 'lib/profile' import { useDatabaseSelectorStateSnapshot } from 'state/database-selector' import { Dashboards } from 'types' import { Button, cn, DropdownMenu, DropdownMenuContent, DropdownMenuTrigger } from 'ui' +import ConfirmationModal from 'ui-patterns/Dialogs/ConfirmationModal' import { createSqlSnippetSkeletonV2 } from '../SQLEditor/SQLEditor.utils' import { ChartConfig } from '../SQLEditor/UtilityPanel/ChartConfig' import { GridResize } from './GridResize' @@ -40,6 +42,7 @@ const DEFAULT_CHART_COLUMN_COUNT = 1 const DEFAULT_CHART_ROW_COUNT = 1 const Reports = () => { + const router = useRouter() const { id, ref } = useParams() const { profile } = useProfile() const { data: project } = useSelectedProjectQuery() @@ -54,6 +57,9 @@ const Reports = () => { const [hasEdits, setHasEdits] = useState(false) const [isRefreshing, setIsRefreshing] = useState(false) + const [navigateUrl, setNavigateUrl] = useState() + const [confirmNavigate, setConfirmNavigate] = useState(false) + const { data: userContents, isLoading, @@ -352,6 +358,31 @@ const Reports = () => { checkEditState() }, [config]) + useEffect(() => { + const handleBeforeUnload = (e: BeforeUnloadEvent) => { + if (hasEdits) { + e.preventDefault() + e.returnValue = '' // deprecated, but older browsers still require this + } + } + + const handleBrowseAway = (url: string) => { + if (hasEdits && !confirmNavigate) { + setNavigateUrl(url) + throw 'Route change declined' // Just to prevent the route change + } else { + setNavigateUrl(undefined) + } + } + + window.addEventListener('beforeunload', handleBeforeUnload) + router.events.on('routeChangeStart', handleBrowseAway) + return () => { + window.removeEventListener('beforeunload', handleBeforeUnload) + router.events.off('routeChangeStart', handleBrowseAway) + } + }, [hasEdits, confirmNavigate, router]) + if (isLoading) { return } @@ -361,149 +392,167 @@ const Reports = () => { } return ( -
-
-
-

{currentReport?.name || 'Reports'}

-

{currentReport?.description}

+ <> +
+
+
+

{currentReport?.name || 'Reports'}

+

{currentReport?.description}

+
+ {hasEdits && ( +
+ + +
+ )}
- {hasEdits && ( +
- - -
- )} -
-
-
- } - className="w-7" - disabled={isRefreshing} - tooltip={{ content: { side: 'bottom', text: 'Refresh report' } }} - onClick={onRefreshReport} - /> -
- -

- SQL blocks are independent of the selected date range -

-
- } + icon={} + className="w-7" + disabled={isRefreshing} + tooltip={{ content: { side: 'bottom', text: 'Refresh report' } }} + onClick={onRefreshReport} /> +
+ +

+ SQL blocks are independent of the selected date range +

+
+ } + /> + + {startDate && endDate && ( +
+ + {dayjs(startDate).format('MMM D, YYYY')} + + + + + + {dayjs(endDate).format('MMM D, YYYY')} + +
+ )} +
+
- {startDate && endDate && ( -
- - {dayjs(startDate).format('MMM D, YYYY')} - - - - - - {dayjs(endDate).format('MMM D, YYYY')} - -
+
+ {canUpdateReport ? ( + + + + + + + + + ) : ( + } + tooltip={{ + content: { + side: 'bottom', + className: 'w-56 text-center', + text: 'You need additional permissions to update custom reports', + }, + }} + > + Add block + )} +
-
- {canUpdateReport ? ( - - - - - - - - - ) : ( - } - tooltip={{ - content: { - side: 'bottom', - className: 'w-56 text-center', - text: 'You need additional permissions to update custom reports', - }, - }} - > - Add block - - )} - -
+ {config?.layout !== undefined && config.layout.length === 0 ? ( +
+ {canUpdateReport ? ( + + + + + + + + + ) : ( +

No charts set up yet in report

+ )} +
+ ) : ( +
+ {config && startDate && endDate && ( + + )} +
+ )}
- - {config?.layout !== undefined && config.layout.length === 0 ? ( -
- {canUpdateReport ? ( - - - - - - - - - ) : ( -

No charts set up yet in report

- )} -
- ) : ( -
- {config && startDate && endDate && ( - - )} -
- )} -
+ { + setConfirmNavigate(true) + setNavigateUrl(undefined) + router.push(navigateUrl ?? '/') + }} + onCancel={() => setNavigateUrl(undefined)} + > +

+ Unsaved changes will be lost, are you sure you want to navigate away? +

+
+ ) } diff --git a/apps/studio/components/interfaces/SQLEditor/MonacoEditor.tsx b/apps/studio/components/interfaces/SQLEditor/MonacoEditor.tsx index 59ea6403dc820..97f4fdb668e11 100644 --- a/apps/studio/components/interfaces/SQLEditor/MonacoEditor.tsx +++ b/apps/studio/components/interfaces/SQLEditor/MonacoEditor.tsx @@ -88,6 +88,17 @@ const MonacoEditor = ({ }, }) + editor.addAction({ + id: 'save-query', + label: 'Save Query', + keybindings: [monaco.KeyMod.CtrlCmd + monaco.KeyCode.KeyS], + contextMenuGroupId: 'operation', + contextMenuOrder: 0, + run: () => { + if (snippet) snapV2.addNeedsSaving(snippet.snippet.id) + }, + }) + editor.addAction({ id: 'explain-code', label: 'Explain Code', diff --git a/apps/studio/components/interfaces/SQLEditor/UtilityPanel/RunButton.tsx b/apps/studio/components/interfaces/SQLEditor/UtilityPanel/RunButton.tsx index 627e73768ab92..19403f8278f5f 100644 --- a/apps/studio/components/interfaces/SQLEditor/UtilityPanel/RunButton.tsx +++ b/apps/studio/components/interfaces/SQLEditor/UtilityPanel/RunButton.tsx @@ -1,5 +1,6 @@ -import { detectOS } from 'lib/helpers' import { Command, CornerDownLeft, Loader2 } from 'lucide-react' + +import { detectOS } from 'lib/helpers' import { Button } from 'ui' interface SqlRunButtonProps { diff --git a/apps/studio/components/interfaces/SQLEditor/UtilityPanel/UtilityActions.tsx b/apps/studio/components/interfaces/SQLEditor/UtilityPanel/UtilityActions.tsx index 29a026d50dd43..d7704a00b44a1 100644 --- a/apps/studio/components/interfaces/SQLEditor/UtilityPanel/UtilityActions.tsx +++ b/apps/studio/components/interfaces/SQLEditor/UtilityPanel/UtilityActions.tsx @@ -6,7 +6,6 @@ import { RoleImpersonationPopover } from 'components/interfaces/RoleImpersonatio import DatabaseSelector from 'components/ui/DatabaseSelector' import { useLocalStorageQuery } from 'hooks/misc/useLocalStorage' import { IS_PLATFORM } from 'lib/constants' -import { detectOS } from 'lib/helpers' import { useSqlEditorV2StateSnapshot } from 'state/sql-editor-v2' import { Button, @@ -27,7 +26,7 @@ export type UtilityActionsProps = { id: string isExecuting?: boolean isDisabled?: boolean - hasSelection: boolean + hasSelection?: boolean prettifyQuery: () => void executeQuery: () => void } @@ -36,11 +35,10 @@ const UtilityActions = ({ id, isExecuting = false, isDisabled = false, - hasSelection, + hasSelection = false, prettifyQuery, executeQuery, }: UtilityActionsProps) => { - const os = detectOS() const { ref } = useParams() const snapV2 = useSqlEditorV2StateSnapshot() @@ -189,6 +187,7 @@ const UtilityActions = ({ variant={IS_PLATFORM ? 'connected-on-both' : 'connected-on-right'} /> void @@ -23,7 +22,6 @@ export interface FileExplorerProps { const FileExplorer = ({ columns = [], - openedFolders = [], selectedItems = [], itemSearchString, onFilesUpload = noop, @@ -61,7 +59,6 @@ const FileExplorer = ({ key={`column-${index}`} index={index} column={column} - openedFolders={openedFolders} selectedItems={selectedItems} itemSearchString={itemSearchString} onFilesUpload={onFilesUpload} diff --git a/apps/studio/components/interfaces/Storage/StorageExplorer/FileExplorerColumn.tsx b/apps/studio/components/interfaces/Storage/StorageExplorer/FileExplorerColumn.tsx index 84167c8d27107..5d1ed5f3066cd 100644 --- a/apps/studio/components/interfaces/Storage/StorageExplorer/FileExplorerColumn.tsx +++ b/apps/studio/components/interfaces/Storage/StorageExplorer/FileExplorerColumn.tsx @@ -19,7 +19,7 @@ import { STORAGE_ROW_TYPES, STORAGE_VIEWS, } from '../Storage.constants' -import type { StorageColumn, StorageItem, StorageItemWithColumn } from '../Storage.types' +import type { StorageColumn, StorageItemWithColumn } from '../Storage.types' import FileExplorerRow from './FileExplorerRow' const DragOverOverlay = ({ isOpen, onDragLeave, onDrop, folderIsEmpty }: any) => { @@ -60,7 +60,6 @@ export interface FileExplorerColumnProps { index: number column: StorageColumn fullWidth?: boolean - openedFolders?: StorageItem[] selectedItems: StorageItemWithColumn[] itemSearchString: string onFilesUpload: (event: any, index: number) => void @@ -73,7 +72,6 @@ const FileExplorerColumn = ({ index = 0, column, fullWidth = false, - openedFolders = [], selectedItems = [], itemSearchString, onFilesUpload = noop, @@ -221,7 +219,6 @@ const FileExplorerColumn = ({ view: snap.view, columnIndex: index, selectedItems, - openedFolders, }} ItemComponent={FileExplorerRow} getItemSize={(index) => (index !== 0 && index === columnItems.length ? 85 : 37)} diff --git a/apps/studio/components/interfaces/Storage/StorageExplorer/FileExplorerRow.tsx b/apps/studio/components/interfaces/Storage/StorageExplorer/FileExplorerRow.tsx index 306eb49098fec..8979041793e68 100644 --- a/apps/studio/components/interfaces/Storage/StorageExplorer/FileExplorerRow.tsx +++ b/apps/studio/components/interfaces/Storage/StorageExplorer/FileExplorerRow.tsx @@ -22,7 +22,6 @@ import type { ItemRenderer } from 'components/ui/InfiniteList' import { useCheckPermissions } from 'hooks/misc/useCheckPermissions' import { BASE_PATH } from 'lib/constants' import { formatBytes } from 'lib/helpers' -import { toast } from 'sonner' import { useStorageExplorerStateSnapshot } from 'state/storage-explorer' import { Checkbox, @@ -51,7 +50,6 @@ import { StorageItem, StorageItemWithColumn } from '../Storage.types' import FileExplorerRowEditing from './FileExplorerRowEditing' import { copyPathToFolder, downloadFile } from './StorageExplorer.utils' import { useCopyUrl } from './useCopyUrl' -import { useSelectedBucket } from './useSelectedBucket' export const RowIcon = ({ view, @@ -104,7 +102,6 @@ export interface FileExplorerRowProps { view: STORAGE_VIEWS columnIndex: number selectedItems: StorageItemWithColumn[] - openedFolders: StorageItem[] } const FileExplorerRow: ItemRenderer = ({ @@ -113,16 +110,14 @@ const FileExplorerRow: ItemRenderer = ({ view = STORAGE_VIEWS.COLUMNS, columnIndex = 0, selectedItems = [], - openedFolders = [], }) => { const { ref: projectRef, bucketId } = useParams() - const { bucket } = useSelectedBucket() const { selectedBucket, selectedFilePreview, + openedFolders, popColumnAtIndex, - pushOpenedFolderAtIndex, popOpenedFoldersAtIndex, clearSelectedItems, setSelectedFilePreview, @@ -131,22 +126,21 @@ const FileExplorerRow: ItemRenderer = ({ setSelectedItemsToDelete, setSelectedItemToRename, setSelectedItemsToMove, - fetchFolderContents, + openFolder, downloadFolder, selectRangeItems, } = useStorageExplorerStateSnapshot() + const { show } = useContextMenu() const { onCopyUrl } = useCopyUrl() const isPublic = selectedBucket.public const itemWithColumnIndex = { ...item, columnIndex } const isSelected = !!selectedItems.find((i) => i.id === item.id) const isOpened = - openedFolders.length > columnIndex ? isEqual(openedFolders[columnIndex], item) : false + openedFolders.length > columnIndex ? openedFolders[columnIndex].name === item.name : false const isPreviewed = !isEmpty(selectedFilePreview) && isEqual(selectedFilePreview?.id, item.id) const canUpdateFiles = useCheckPermissions(PermissionAction.STORAGE_WRITE, '*') - const { show } = useContextMenu() - const onSelectFile = async (columnIndex: number, file: StorageItem) => { popColumnAtIndex(columnIndex) popOpenedFoldersAtIndex(columnIndex - 1) @@ -154,21 +148,6 @@ const FileExplorerRow: ItemRenderer = ({ clearSelectedItems() } - const onSelectFolder = async (columnIndex: number, folder: StorageItem) => { - if (!bucket) return toast.error('Unable to retrieve bucket details') - - setSelectedFilePreview(undefined) - clearSelectedItems(columnIndex + 1) - popOpenedFoldersAtIndex(columnIndex - 1) - pushOpenedFolderAtIndex(folder, columnIndex) - await fetchFolderContents({ - bucketId: bucket.id, - folderId: folder.id, - folderName: folder.name, - index: columnIndex, - }) - } - const onCheckItem = (isShiftKeyHeld: boolean) => { // Select a range if shift is held down if (isShiftKeyHeld && selectedItems.length !== 0) { @@ -346,7 +325,7 @@ const FileExplorerRow: ItemRenderer = ({ event.preventDefault() if (item.status !== STORAGE_ROW_STATUS.LOADING && !isOpened && !isPreviewed) { item.type === STORAGE_ROW_TYPES.FOLDER || item.type === STORAGE_ROW_TYPES.BUCKET - ? onSelectFolder(columnIndex, item) + ? openFolder(columnIndex, item) : onSelectFile(columnIndex, item) } }} diff --git a/apps/studio/components/interfaces/Storage/StorageExplorer/FileExplorerRowEditing.tsx b/apps/studio/components/interfaces/Storage/StorageExplorer/FileExplorerRowEditing.tsx index 2be0df79f40bd..cd17e1b162240 100644 --- a/apps/studio/components/interfaces/Storage/StorageExplorer/FileExplorerRowEditing.tsx +++ b/apps/studio/components/interfaces/Storage/StorageExplorer/FileExplorerRowEditing.tsx @@ -30,7 +30,17 @@ const FileExplorerRowEditing = ({ item, view, columnIndex }: FileExplorerRowEdit const itemWithColumnIndex = { ...item, columnIndex } renameFolder(itemWithColumnIndex, name, columnIndex) } else { - addNewFolder(name, columnIndex) + addNewFolder({ + folderName: name, + columnIndex, + onError: () => { + if (event.type === 'blur') { + addNewFolder({ folderName: '', columnIndex }) + } else { + inputRef.current.select() + } + }, + }) } } @@ -47,7 +57,7 @@ const FileExplorerRowEditing = ({ item, view, columnIndex }: FileExplorerRowEdit const handleEsc = (event: KeyboardEvent) => { if (event.key === 'Escape') { if (item?.id !== undefined) onSaveItemName(item.name) - else addNewFolder('', columnIndex) + else addNewFolder({ folderName: '', columnIndex }) } } diff --git a/apps/studio/components/interfaces/Storage/StorageExplorer/StorageExplorer.tsx b/apps/studio/components/interfaces/Storage/StorageExplorer/StorageExplorer.tsx index cfc8ecd5c40ad..160e8118e4f9b 100644 --- a/apps/studio/components/interfaces/Storage/StorageExplorer/StorageExplorer.tsx +++ b/apps/studio/components/interfaces/Storage/StorageExplorer/StorageExplorer.tsx @@ -181,7 +181,6 @@ const StorageExplorer = ({ bucket }: StorageExplorerProps) => {
{ passHref href={`/project/${projectRef}/auth/policies?search=${table.id}&schema=${table.schema}`} > - Auth {policies.length > 1 ? 'policies' : 'policy'} + RLS {policies.length > 1 ? 'policies' : 'policy'} )} diff --git a/apps/studio/components/layouts/SQLEditorLayout/SQLEditorNavV2/SQLEditorTreeViewItem.tsx b/apps/studio/components/layouts/SQLEditorLayout/SQLEditorNavV2/SQLEditorTreeViewItem.tsx index 3633fdf5b74f5..d2c48404aa212 100644 --- a/apps/studio/components/layouts/SQLEditorLayout/SQLEditorNavV2/SQLEditorTreeViewItem.tsx +++ b/apps/studio/components/layouts/SQLEditorLayout/SQLEditorNavV2/SQLEditorTreeViewItem.tsx @@ -6,7 +6,18 @@ import { Snippet } from 'data/content/sql-folders-query' import { useCheckPermissions } from 'hooks/misc/useCheckPermissions' import useLatest from 'hooks/misc/useLatest' import { useProfile } from 'lib/profile' -import { Copy, Download, Edit, ExternalLink, Lock, Move, Plus, Share, Trash } from 'lucide-react' +import { + Copy, + Download, + Edit, + ExternalLink, + Heart, + Lock, + Move, + Plus, + Share, + Trash, +} from 'lucide-react' import Link from 'next/link' import { useRouter } from 'next/router' import { ComponentProps, useEffect } from 'react' @@ -19,6 +30,7 @@ import { ContextMenuTrigger_Shadcn_, ContextMenu_Shadcn_, TreeViewItem, + cn, } from 'ui' interface SQLEditorTreeViewItemProps @@ -85,6 +97,7 @@ export const SQLEditorTreeViewItem = ({ const isOwner = profile?.id === element?.metadata.owner_id const isSharedSnippet = element.metadata.visibility === 'project' + const isFavorite = element.metadata.favorite const isEditing = status === 'editing' const isSaving = status === 'saving' @@ -154,6 +167,14 @@ export const SQLEditorTreeViewItem = ({ } } + const onToggleFavorite = () => { + const snippetId = element.metadata.id + if (snippetId) { + if (isFavorite) snapV2.removeFavorite(snippetId) + else snapV2.addFavorite(snippetId) + } + } + return ( <> @@ -322,6 +343,19 @@ export const SQLEditorTreeViewItem = ({ Duplicate query )} + onToggleFavorite()} + onFocusCapture={(e) => e.stopPropagation()} + > + + {isFavorite ? 'Remove from' : 'Add to'} favorites + {onSelectDownload !== undefined && IS_PLATFORM && ( { + addNewFolder: async ({ + folderName, + columnIndex, + onError, + }: { + folderName: string + columnIndex: number + onError?: () => void + }) => { if (!state.supabaseClient) return console.error('Supabase Client is missing') const autofix = false @@ -284,10 +292,16 @@ function createStorageExplorerState({ autofix, columnIndex, }) - if (formattedName === null) return + if (formattedName === null) { + onError?.() + return + } if (!/^[a-zA-Z0-9_-\s]*$/.test(formattedName)) { - return toast.error('Folder name contains invalid special characters') + onError?.() + return toast.error( + 'Only alphanumeric characters, hyphens, and underscores are allowed for folder names.' + ) } if (formattedName.length === 0) { @@ -318,6 +332,9 @@ function createStorageExplorerState({ paths: [`${pathToFolder}/${EMPTY_FOLDER_PLACEHOLDER_FILE_NAME}`], }) } + + const newFolder = state.columns[columnIndex].items.find((x) => x.name === formattedName) + if (newFolder) state.openFolder(columnIndex, newFolder) }, fetchFolderContents: async ({ @@ -730,6 +747,19 @@ function createStorageExplorerState({ state.columns = updatedColumns }, + openFolder: async (columnIndex: number, folder: StorageItem) => { + state.setSelectedFilePreview(undefined) + state.clearSelectedItems(columnIndex + 1) + state.popOpenedFoldersAtIndex(columnIndex - 1) + state.pushOpenedFolderAtIndex(folder, columnIndex) + await state.fetchFolderContents({ + bucketId: state.selectedBucket.id, + folderId: folder.id, + folderName: folder.name, + index: columnIndex, + }) + }, + downloadFolder: async (folder: StorageItemWithColumn) => { let progress = 0 const toastId = toast.loading('Retrieving files from folder...') From a224598f1ec8d8b17bcb140db138d451e402a903 Mon Sep 17 00:00:00 2001 From: Saxon Fletcher Date: Wed, 6 Aug 2025 18:03:53 +1000 Subject: [PATCH 2/9] Decouple editor panel (#37707) * decouple editor panel from global state * refactor again * dont close assistant * remove async * onsave props * Fix TS errors * Remove editorPanel state from app-state, use useHotKey hooks for keyboard shortcuts * Minor UX improvements to EditorPanel --------- Co-authored-by: Joshen Lim --- .../interfaces/Reports/ReportPadding.tsx | 4 +- .../layouts/AppLayout/AssistantButton.tsx | 3 - .../layouts/AppLayout/InlineEditorButton.tsx | 14 +- .../LayoutHeader/LayoutHeader.tsx | 256 ++++---- .../layouts/ProjectLayout/ProjectLayout.tsx | 43 +- apps/studio/components/ui/AIEditor/index.tsx | 21 + .../ui/DataTable/DataTableResetButton.tsx | 2 +- .../components/ui/EditorPanel/EditorPanel.tsx | 568 ++++++++++-------- .../ui/QueryBlock/EditQueryButton.tsx | 9 +- apps/studio/hooks/ui/useHotKey.ts | 13 +- .../pages/project/[ref]/auth/policies.tsx | 94 ++- .../project/[ref]/database/functions.tsx | 68 ++- .../pages/project/[ref]/database/triggers.tsx | 59 +- .../project/[ref]/reports/api-overview.tsx | 8 +- apps/studio/state/app-state.ts | 95 +-- 15 files changed, 654 insertions(+), 603 deletions(-) diff --git a/apps/studio/components/interfaces/Reports/ReportPadding.tsx b/apps/studio/components/interfaces/Reports/ReportPadding.tsx index 37e30aaff1c5f..1c74cd7b3211a 100644 --- a/apps/studio/components/interfaces/Reports/ReportPadding.tsx +++ b/apps/studio/components/interfaces/Reports/ReportPadding.tsx @@ -1,7 +1,6 @@ import { PropsWithChildren } from 'react' import { useAiAssistantStateSnapshot } from 'state/ai-assistant-state' -import { useAppStateSnapshot } from 'state/app-state' import { cn } from 'ui' /** @@ -9,13 +8,12 @@ import { cn } from 'ui' */ const ReportPadding = ({ children }: PropsWithChildren<{}>) => { const snap = useAiAssistantStateSnapshot() - const { editorPanel } = useAppStateSnapshot() return (
{children} diff --git a/apps/studio/components/layouts/AppLayout/AssistantButton.tsx b/apps/studio/components/layouts/AppLayout/AssistantButton.tsx index 8b9b80ffef26f..93254be01c471 100644 --- a/apps/studio/components/layouts/AppLayout/AssistantButton.tsx +++ b/apps/studio/components/layouts/AppLayout/AssistantButton.tsx @@ -1,12 +1,10 @@ import { ButtonTooltip } from 'components/ui/ButtonTooltip' import { useAiAssistantStateSnapshot } from 'state/ai-assistant-state' -import { useAppStateSnapshot } from 'state/app-state' import { AiIconAnimation } from 'ui' import { KeyboardShortcut } from 'ui' export const AssistantButton = () => { const snap = useAiAssistantStateSnapshot() - const { setEditorPanel } = useAppStateSnapshot() return ( { className="rounded-none w-[32px] h-[30px] flex items-center justify-center p-0 hover:bg-brand-400" onClick={() => { snap.toggleAssistant() - setEditorPanel({ open: false }) }} tooltip={{ content: { diff --git a/apps/studio/components/layouts/AppLayout/InlineEditorButton.tsx b/apps/studio/components/layouts/AppLayout/InlineEditorButton.tsx index a88a80a5bdb7c..d447221b08b6e 100644 --- a/apps/studio/components/layouts/AppLayout/InlineEditorButton.tsx +++ b/apps/studio/components/layouts/AppLayout/InlineEditorButton.tsx @@ -1,23 +1,15 @@ -import { SqlEditor } from 'icons' -import { useAiAssistantStateSnapshot } from 'state/ai-assistant-state' -import { useAppStateSnapshot } from 'state/app-state' import { ButtonTooltip } from 'components/ui/ButtonTooltip' +import { SqlEditor } from 'icons' import { KeyboardShortcut } from 'ui' -export const InlineEditorButton = () => { - const { closeAssistant } = useAiAssistantStateSnapshot() - const { setEditorPanel, editorPanel } = useAppStateSnapshot() - +export const InlineEditorButton = ({ onClick }: { onClick: () => void }) => { return ( { - closeAssistant() - setEditorPanel({ open: !editorPanel.open }) - }} + onClick={onClick} tooltip={{ content: { text: ( diff --git a/apps/studio/components/layouts/ProjectLayout/LayoutHeader/LayoutHeader.tsx b/apps/studio/components/layouts/ProjectLayout/LayoutHeader/LayoutHeader.tsx index 17ca647da39dc..b0d99ecc117df 100644 --- a/apps/studio/components/layouts/ProjectLayout/LayoutHeader/LayoutHeader.tsx +++ b/apps/studio/components/layouts/ProjectLayout/LayoutHeader/LayoutHeader.tsx @@ -1,6 +1,6 @@ import { AnimatePresence, motion } from 'framer-motion' import Link from 'next/link' -import { ReactNode, useMemo } from 'react' +import { ReactNode, useMemo, useState } from 'react' import { useParams } from 'common' import { useIsBranching2Enabled } from 'components/interfaces/App/FeaturePreview/FeaturePreviewContext' @@ -12,10 +12,12 @@ import { BranchDropdown } from 'components/layouts/AppLayout/BranchDropdown' import { InlineEditorButton } from 'components/layouts/AppLayout/InlineEditorButton' import { OrganizationDropdown } from 'components/layouts/AppLayout/OrganizationDropdown' import { ProjectDropdown } from 'components/layouts/AppLayout/ProjectDropdown' +import EditorPanel from 'components/ui/EditorPanel/EditorPanel' import { getResourcesExceededLimitsOrg } from 'components/ui/OveragesBanner/OveragesBanner.utils' import { useOrgUsageQuery } from 'data/usage/org-usage-query' import { useSelectedOrganizationQuery } from 'hooks/misc/useSelectedOrganization' import { useSelectedProjectQuery } from 'hooks/misc/useSelectedProject' +import { useHotKey } from 'hooks/ui/useHotKey' import { IS_PLATFORM } from 'lib/constants' import { useAppStateSnapshot } from 'state/app-state' import { Badge, cn } from 'ui' @@ -64,6 +66,15 @@ const LayoutHeader = ({ const { setMobileMenuOpen } = useAppStateSnapshot() const gitlessBranching = useIsBranching2Enabled() + const [showEditorPanel, setShowEditorPanel] = useState(false) + useHotKey( + () => { + if (projectRef) setShowEditorPanel(!showEditorPanel) + }, + 'e', + [showEditorPanel, projectRef] + ) + // We only want to query the org usage and check for possible over-ages for plans without usage billing enabled (free or pro with spend cap) const { data: orgUsage } = useOrgUsageQuery( { orgSlug: selectedOrganization?.slug }, @@ -82,74 +93,94 @@ const LayoutHeader = ({ const showOrgSelection = slug || (selectedOrganization && projectRef) return ( -
- {showProductMenu && ( -
- -
- )} -
+
+ {showProductMenu && ( +
+ +
)} - > -
- -
- {showOrgSelection && IS_PLATFORM ? ( - <> - - - - ) : null} - - {projectRef && ( - - - +
+
+ +
+ {showOrgSelection && IS_PLATFORM ? ( + <> + + + + ) : null} + + {projectRef && ( + + + - {exceedingLimits && ( -
- - - Exceeding usage limits - - -
- )} + {exceedingLimits && ( +
+ + + Exceeding usage limits + + +
+ )} - {selectedProject && ( - <> - - {IS_PLATFORM && } - - )} -
- )} -
+ {selectedProject && ( + <> + + {IS_PLATFORM && } + + )} + + )} + + + + {headerTitle && ( + + + {headerTitle} + + )} + +
- {headerTitle && ( + {projectRef && ( - - {headerTitle} + {IS_PLATFORM && gitlessBranching && } + )} +
+
+ {customHeaderComponents && customHeaderComponents} + {IS_PLATFORM ? ( + <> + - - {projectRef && ( - - {IS_PLATFORM && gitlessBranching && } - - +
+ + + + {!!projectRef && ( + <> + setShowEditorPanel(true)} /> + + + )} + +
+ + + ) : ( + <> + +
+ + {!!projectRef && ( + <> + setShowEditorPanel(true)} /> + + + )} + +
+ + )} -
- -
-
- {customHeaderComponents && customHeaderComponents} - {IS_PLATFORM ? ( - <> - - -
- - - - {!!projectRef && ( - <> - - - - )} - -
- - - ) : ( - <> - -
- - {!!projectRef && ( - <> - - - - )} - -
- - - )} +
-
-
+
+ setShowEditorPanel(false)} /> + ) } diff --git a/apps/studio/components/layouts/ProjectLayout/ProjectLayout.tsx b/apps/studio/components/layouts/ProjectLayout/ProjectLayout.tsx index 831d3c0a021bf..fb9c5bcf9fa2a 100644 --- a/apps/studio/components/layouts/ProjectLayout/ProjectLayout.tsx +++ b/apps/studio/components/layouts/ProjectLayout/ProjectLayout.tsx @@ -7,12 +7,12 @@ import { useParams } from 'common' import { CreateBranchModal } from 'components/interfaces/BranchManagement/CreateBranchModal' import ProjectAPIDocs from 'components/interfaces/ProjectAPIDocs/ProjectAPIDocs' import { AIAssistant } from 'components/ui/AIAssistantPanel/AIAssistant' -import { EditorPanel } from 'components/ui/EditorPanel/EditorPanel' import { Loading } from 'components/ui/Loading' import { ResourceExhaustionWarningBanner } from 'components/ui/ResourceExhaustionWarningBanner/ResourceExhaustionWarningBanner' import { useSelectedOrganizationQuery } from 'hooks/misc/useSelectedOrganization' import { useSelectedProjectQuery } from 'hooks/misc/useSelectedProject' import { withAuth } from 'hooks/misc/withAuth' +import { useHotKey } from 'hooks/ui/useHotKey' import { PROJECT_STATUS } from 'lib/constants' import { useAiAssistantStateSnapshot } from 'state/ai-assistant-state' import { useAppStateSnapshot } from 'state/app-state' @@ -91,16 +91,11 @@ const ProjectLayout = forwardRef aiSnap.toggleAssistant(), 'i', [aiSnap]) + const editor = useEditorType() const forceShowProductMenu = editor === undefined const sideBarIsOpen = forceShowProductMenu || showSidebar @@ -124,28 +119,6 @@ const ProjectLayout = forwardRef { - const handler = (e: KeyboardEvent) => { - // Cmd+I: Open AI Assistant, close Editor Panel - if (e.metaKey && e.key === 'i' && !e.altKey && !e.shiftKey) { - setEditorPanel({ open: false }) - aiSnap.toggleAssistant() - e.preventDefault() - e.stopPropagation() - } - // Cmd+E: Toggle Editor Panel, always close AI Assistant - if (e.metaKey && e.key === 'e' && !e.altKey && !e.shiftKey) { - aiSnap.closeAssistant() - toggleEditorPanel() - e.preventDefault() - e.stopPropagation() - } - } - window.addEventListener('keydown', handler) - return () => window.removeEventListener('keydown', handler) - // eslint-disable-next-line react-hooks/exhaustive-deps - }, [setEditorPanel, aiSnap, editorPanel.open]) - return ( <> @@ -238,7 +211,7 @@ const ProjectLayout = forwardRef - {isClient && (aiSnap.open || editorPanel.open) && ( + {isClient && aiSnap.open && ( <> - {aiSnap.open ? ( - - ) : editorPanel.open ? ( - - ) : null} + )} diff --git a/apps/studio/components/ui/AIEditor/index.tsx b/apps/studio/components/ui/AIEditor/index.tsx index 6dc2a84ab3ab2..57ed87433a6cb 100644 --- a/apps/studio/components/ui/AIEditor/index.tsx +++ b/apps/studio/components/ui/AIEditor/index.tsx @@ -23,9 +23,11 @@ interface AIEditorProps { } initialPrompt?: string readOnly?: boolean + autoFocus?: boolean className?: string options?: monacoEditor.IStandaloneEditorConstructionOptions onChange?: (value: string) => void + onClose?: () => void executeQuery?: () => void } @@ -41,9 +43,11 @@ const AIEditor = ({ aiMetadata, initialPrompt, readOnly = false, + autoFocus = false, className = '', options = {}, onChange, + onClose, executeQuery, }: AIEditorProps) => { const os = detectOS() @@ -149,6 +153,17 @@ const AIEditor = ({ }) } + if (!!onClose) { + editor.addAction({ + id: 'close-editor', + label: 'Close editor', + keybindings: [monaco.KeyMod.CtrlCmd + monaco.KeyCode.KeyE], + contextMenuGroupId: 'operation', + contextMenuOrder: 0, + run: () => onClose(), + }) + } + editor.addAction({ id: 'generate-ai', label: 'Generate with AI', @@ -176,6 +191,11 @@ const AIEditor = ({ }) }, }) + + if (autoFocus) { + if (editor.getValue().length === 1) editor.setPosition({ lineNumber: 1, column: 2 }) + editor.focus() + } } const handlePrompt = async ( @@ -327,6 +347,7 @@ const AIEditor = ({
) : (
+ {/* [Joshen] Refactor: Use CodeEditor.tsx instead, reduce duplicate declaration of Editor */} table.resetColumnFilters(), 'Escape') return ( diff --git a/apps/studio/components/ui/EditorPanel/EditorPanel.tsx b/apps/studio/components/ui/EditorPanel/EditorPanel.tsx index 62d593fbab33a..ae19f3ca6dbbe 100644 --- a/apps/studio/components/ui/EditorPanel/EditorPanel.tsx +++ b/apps/studio/components/ui/EditorPanel/EditorPanel.tsx @@ -1,6 +1,6 @@ -import { debounce } from 'lodash' import { Book, Save, X } from 'lucide-react' -import { useCallback, useEffect, useState } from 'react' +import { useEffect, useState } from 'react' +import { useForm } from 'react-hook-form' import { toast } from 'sonner' import { useParams } from 'common' @@ -17,7 +17,6 @@ import { useSelectedProjectQuery } from 'hooks/misc/useSelectedProject' import { BASE_PATH } from 'lib/constants' import { uuidv4 } from 'lib/helpers' import { useProfile } from 'lib/profile' -import { useAppStateSnapshot } from 'state/app-state' import { useSqlEditorV2StateSnapshot } from 'state/sql-editor-v2' import { Button, @@ -29,12 +28,21 @@ import { CommandInput_Shadcn_, CommandItem_Shadcn_, CommandList_Shadcn_, + Form_Shadcn_, + FormField_Shadcn_, HoverCard_Shadcn_, HoverCardContent_Shadcn_, HoverCardTrigger_Shadcn_, + Input_Shadcn_ as Input, + KeyboardShortcut, Popover_Shadcn_, PopoverContent_Shadcn_, PopoverTrigger_Shadcn_, + Sheet, + SheetContent, + SheetDescription, + SheetHeader, + SheetTitle, SQL_ICON, } from 'ui' import { Admonition } from 'ui-patterns' @@ -44,14 +52,44 @@ import { ButtonTooltip } from '../ButtonTooltip' import { InlineLink } from '../InlineLink' import SqlWarningAdmonition from '../SqlWarningAdmonition' +type Template = { + name: string + description: string + content: string +} + interface EditorPanelProps { + open: boolean + onClose: () => void + initialValue?: string + label?: string + saveLabel?: string + saveValue?: string + onSave?: (value: string, saveValue: string) => void + onRunSuccess?: (value: any[]) => void + onRunError?: (value: any) => void + functionName?: string + templates?: Template[] + initialPrompt?: string onChange?: (value: string) => void } -export const EditorPanel = ({ onChange }: EditorPanelProps) => { +export const EditorPanel = ({ + open, + onClose, + initialValue = '', + label = '', + saveLabel = 'Save', + saveValue = '', + onSave, + onRunSuccess, + onRunError, + templates = [], + initialPrompt = '', + onChange, +}: EditorPanelProps) => { const { ref } = useParams() const { data: project } = useSelectedProjectQuery() - const { editorPanel, setEditorPanel } = useAppStateSnapshot() const { profile } = useProfile() const snapV2 = useSqlEditorV2StateSnapshot() const { mutateAsync: generateSqlTitle } = useSqlTitleGenerateMutation() @@ -61,26 +99,38 @@ export const EditorPanel = ({ onChange }: EditorPanelProps) => { const [error, setError] = useState() const [results, setResults] = useState(undefined) const [showWarning, setShowWarning] = useState<'hasWriteOperation' | 'hasUnknownFunctions'>() - const [currentValue, setCurrentValue] = useState(editorPanel.initialValue || '') - const [savedCode, setSavedCode] = useState('') - const [isPreviewingTemplate, setIsPreviewingTemplate] = useState(false) + const [currentValue, setCurrentValue] = useState(initialValue) const [showResults, setShowResults] = useState(true) const [isTemplatesOpen, setIsTemplatesOpen] = useState(false) + const saveForm = useForm({ + defaultValues: { + saveValue: saveValue || '', + }, + }) + const errorHeader = error?.formattedError?.split('\n')?.filter((x: string) => x.length > 0)?.[0] const errorContent = - error?.formattedError - ?.split('\n') - ?.filter((x: string) => x.length > 0) - ?.slice(1) ?? [] + 'formattedError' in (error || {}) + ? error?.formattedError + ?.split('\n') + ?.filter((x: string) => x.length > 0) + ?.slice(1) ?? [] + : [error?.message ?? ''] const { mutate: executeSql, isLoading: isExecuting } = useExecuteSqlMutation({ onSuccess: async (res) => { setResults(res.result) + if (onRunSuccess) { + onRunSuccess(res.result) + } }, onError: (error) => { setError(error) setResults([]) + if (onRunError) { + onRunError(error) + } }, }) @@ -98,11 +148,6 @@ export const EditorPanel = ({ onChange }: EditorPanelProps) => { return } } - - if (editorPanel.onSave) { - editorPanel.onSave(currentValue) - } - executeSql({ sql: suffixWithLimit(currentValue, 100), projectRef: project?.ref, @@ -124,250 +169,285 @@ export const EditorPanel = ({ onChange }: EditorPanelProps) => { setIsTemplatesOpen(false) } - // Create a debounced version of the revert code function - const debouncedRevertCode = useCallback( - debounce(() => { - setIsPreviewingTemplate(false) - handleChange(savedCode) - }, 300), - [savedCode] - ) - - // Cleanup debounce on unmount - useEffect(() => { - return () => { - debouncedRevertCode.cancel() - } - }, [debouncedRevertCode]) - useEffect(() => { - if (editorPanel.initialValue !== undefined && editorPanel.initialValue !== currentValue) { - setCurrentValue(editorPanel.initialValue) + if (initialValue !== undefined && initialValue !== currentValue) { + setCurrentValue(initialValue) + setResults(undefined) + setError(undefined) + setShowWarning(undefined) } - }, [editorPanel.initialValue]) + }, [initialValue]) useEffect(() => { - if (editorPanel.initialValue !== currentValue) { - setEditorPanel({ - initialValue: currentValue, - }) - } - }, [currentValue, setEditorPanel]) + saveForm.reset({ + saveValue: saveValue || '', + }) + }, [saveValue, saveForm]) return ( -
-
- SQL Editor -
- - - - - - - - - No templates found. - - {editorPanel.templates?.map((template) => ( - - - onSelectTemplate(template.content)} - className="cursor-pointer" - > -
- !open && onClose()}> + + +
+ SQL Editor + {label && {label}} +
+
+ {templates.length > 0 && ( + + + + + + + + + No templates found. + + {templates.map((template) => ( + + + onSelectTemplate(template.content)} + className="cursor-pointer" + > +
+ +
+

{template.name}

+

+ {template.description} +

+
+
+
+
+ + -
-

{template.name}

-

- {template.description} -

-
-
- - - - - - - ))} - - - - - - } - onClick={async () => { - if (!ref) return console.error('Project ref is required') - if (!project) return console.error('Project is required') - if (!profile) return console.error('Profile is required') - - try { - setIsSaving(true) - const { title: name } = await generateSqlTitle({ - sql: currentValue, - }) - const snippet = createSqlSnippetSkeletonV2({ - id: uuidv4(), - name, - sql: currentValue, - owner_id: profile.id, - project_id: project.id, - }) - snapV2.addSnippet({ projectRef: ref, snippet }) - snapV2.addNeedsSaving(snippet.id) - toast.success( -
- Saved snippet! View it{' '} - here -
- ) - } catch (error: any) { - toast.error(`Failed to create new query: ${error.message}`) - } finally { - setIsSaving(false) - } - }} - /> + + + ))} + + + + + + )} + } + onClick={async () => { + if (!ref) return console.error('Project ref is required') + if (!project) return console.error('Project is required') + if (!profile) return console.error('Profile is required') -
-
+ try { + setIsSaving(true) + const { title: name } = await generateSqlTitle({ + sql: currentValue, + }) + const snippet = createSqlSnippetSkeletonV2({ + id: uuidv4(), + name, + sql: currentValue, + owner_id: profile.id, + project_id: project.id, + }) + snapV2.addSnippet({ projectRef: ref, snippet }) + snapV2.addNeedsSaving(snippet.id) + toast.success( +
+ Saved snippet! View it{' '} + here +
+ ) + } catch (error: any) { + toast.error(`Failed to create new query: ${error.message}`) + } finally { + setIsSaving(false) + } + }} + /> -
-
- -
+ } + tooltip={{ + content: { + side: 'bottom', + text: ( +
+ Close Editor + +
+ ), + }, + }} + /> +
+ - {error !== undefined && ( -
- - {errorContent.length > 0 ? ( - errorContent.map((errorText: string, i: number) => ( -
-                        {errorText}
-                      
- )) - ) : ( -

{error.error}

- )} -
- } +
+
+ onClose()} />
- )} - {showWarning && ( - setShowWarning(undefined)} - onConfirm={() => { - setShowWarning(undefined) - onExecuteSql(true) - }} - /> - )} + {error !== undefined && ( +
+ + {errorContent.length > 0 ? ( + errorContent.map((errorText: string, i: number) => ( +
+                          {errorText}
+                        
+ )) + ) : ( +

{error.error}

+ )} +
+ } + /> +
+ )} + + {showWarning && ( + setShowWarning(undefined)} + onConfirm={() => { + setShowWarning(undefined) + onExecuteSql(true) + }} + /> + )} + + {results !== undefined && results.length > 0 && ( +
+ {showResults && ( +
+ +
+ )} +

+ + {results.length} rows{results.length >= 100 && ` (Limited to only 100 rows)`} + + +

+
+ )} + {results !== undefined && results.length === 0 && !error && ( +
+

+ Success. No rows returned. +

+
+ )} - {results !== undefined && results.length > 0 && ( -
- {showResults && ( -
- -
+
+ {onSave && ( + +
{ + onSave(currentValue, values.saveValue) + })} + className="flex items-center gap-2" + > + {saveValue && ( + ( + + )} + /> + )} + + +
)} -

- - {results.length} rows{results.length >= 100 && ` (Limited to only 100 rows)`} - - -

-
- )} - {results !== undefined && results.length === 0 && ( -
-

- Success. No rows returned. -

+
- )} - -
-
-
-
+ + ) } diff --git a/apps/studio/components/ui/QueryBlock/EditQueryButton.tsx b/apps/studio/components/ui/QueryBlock/EditQueryButton.tsx index 8559432226d2f..60585ed66620d 100644 --- a/apps/studio/components/ui/QueryBlock/EditQueryButton.tsx +++ b/apps/studio/components/ui/QueryBlock/EditQueryButton.tsx @@ -10,7 +10,6 @@ import { useSelectedOrganizationQuery } from 'hooks/misc/useSelectedOrganization import Link from 'next/link' import { ComponentProps } from 'react' import { useAiAssistantStateSnapshot } from 'state/ai-assistant-state' -import { useAppStateSnapshot } from 'state/app-state' import { useSqlEditorV2StateSnapshot } from 'state/sql-editor-v2' import { cn, @@ -42,7 +41,6 @@ export const EditQueryButton = ({ const { newQuery } = useNewQuery() const sqlEditorSnap = useSqlEditorV2StateSnapshot() - const { setEditorPanel } = useAppStateSnapshot() const snap = useAiAssistantStateSnapshot() const isInSQLEditor = router.pathname.includes('/sql') @@ -78,10 +76,9 @@ export const EditQueryButton = ({ icon={} onClick={() => { if (isInlineEditorEnabled) { - setEditorPanel({ - open: true, - initialValue: sql, - }) + // This component needs to be updated to work with local EditorPanel state + // For now, fall back to creating a new query + if (sql) newQuery(sql, title) snap.closeAssistant() } else { if (sql) newQuery(sql, title) diff --git a/apps/studio/hooks/ui/useHotKey.ts b/apps/studio/hooks/ui/useHotKey.ts index d0c381b9beb03..4d1093ea10e8c 100644 --- a/apps/studio/hooks/ui/useHotKey.ts +++ b/apps/studio/hooks/ui/useHotKey.ts @@ -1,11 +1,14 @@ import { useEffect } from 'react' -export function useHotKey(callback: () => void, key: string): void { +export function useHotKey( + callback: (e: KeyboardEvent) => void, + key: string, + dependencies: any[] = [] +): void { useEffect(() => { function handler(e: KeyboardEvent) { - if (e.key === key && (e.metaKey || e.ctrlKey)) { - // e.preventDefault(); - callback() + if ((e.metaKey || e.ctrlKey) && e.key === key && !e.altKey && !e.shiftKey) { + callback(e) } } @@ -13,5 +16,5 @@ export function useHotKey(callback: () => void, key: string): void { return () => { window.removeEventListener('keydown', handler) } - }, [key]) + }, [key, ...dependencies]) } diff --git a/apps/studio/pages/project/[ref]/auth/policies.tsx b/apps/studio/pages/project/[ref]/auth/policies.tsx index 0e6ba60d9ac7d..fe8f6313386cc 100644 --- a/apps/studio/pages/project/[ref]/auth/policies.tsx +++ b/apps/studio/pages/project/[ref]/auth/policies.tsx @@ -12,6 +12,7 @@ import AuthLayout from 'components/layouts/AuthLayout/AuthLayout' import DefaultLayout from 'components/layouts/DefaultLayout' import AlertError from 'components/ui/AlertError' import { DocsButton } from 'components/ui/DocsButton' +import { EditorPanel } from 'components/ui/EditorPanel/EditorPanel' import NoPermission from 'components/ui/NoPermission' import SchemaSelector from 'components/ui/SchemaSelector' import { GenericSkeletonLoader } from 'components/ui/ShimmeringLoader' @@ -21,7 +22,6 @@ import { useCheckPermissions, usePermissionsLoaded } from 'hooks/misc/useCheckPe import { useSelectedProjectQuery } from 'hooks/misc/useSelectedProject' import { useUrlState } from 'hooks/ui/useUrlState' import { useIsProtectedSchema } from 'hooks/useProtectedSchemas' -import { useAppStateSnapshot } from 'state/app-state' import type { NextPageWithLayout } from 'types' import { Input } from 'ui' @@ -67,13 +67,15 @@ const AuthPoliciesPage: NextPageWithLayout = () => { }>() const { schema = 'public', search: searchString = '' } = params const { data: project } = useSelectedProjectQuery() - const { setEditorPanel } = useAppStateSnapshot() const isInlineEditorEnabled = useIsInlineEditorEnabled() const [selectedTable, setSelectedTable] = useState() const [showPolicyAiEditor, setShowPolicyAiEditor] = useState(false) const [selectedPolicyToEdit, setSelectedPolicyToEdit] = useState() + // Local editor panel state + const [editorPanelOpen, setEditorPanelOpen] = useState(false) + const { isSchemaLocked } = useIsProtectedSchema({ schema: schema, excludedSchemas: ['realtime'] }) const { data: policies } = useDatabasePoliciesQuery({ @@ -142,43 +144,20 @@ const AuthPoliciesPage: NextPageWithLayout = () => { hasTables={tables.length > 0} isLocked={isSchemaLocked} onSelectCreatePolicy={(table: string) => { + setSelectedTable(table) + setSelectedPolicyToEdit(undefined) if (isInlineEditorEnabled) { - setEditorPanel({ - open: true, - initialValue: `create policy "replace_with_policy_name" - on ${schema}.${table} - for select - to authenticated - using ( - true -- Write your policy condition here -);`, - label: `Create new RLS policy on "${table}"`, - saveLabel: 'Create policy', - initialPrompt: `Create and name a entirely new RLS policy for the "${table}" table in the ${schema} schema. The policy should...`, - }) + setEditorPanelOpen(true) } else { - setSelectedTable(table) setShowPolicyAiEditor(true) } }} onSelectEditPolicy={(policy) => { + setSelectedPolicyToEdit(policy) + setSelectedTable(undefined) if (isInlineEditorEnabled) { - const sql = generatePolicyUpdateSQL(policy) - const templates = getGeneralPolicyTemplates(policy.schema, policy.table) - setEditorPanel({ - open: true, - initialValue: sql, - label: `Edit policy "${policy.name}"`, - saveLabel: 'Update policy', - templates: templates.map((template) => ({ - name: template.templateName, - description: template.description, - content: template.statement, - })), - initialPrompt: `Update the policy with name "${policy.name}" in the ${policy.schema} schema on the ${policy.table} table. It should...`, - }) + setEditorPanelOpen(true) } else { - setSelectedPolicyToEdit(policy) setShowPolicyAiEditor(true) } }} @@ -198,6 +177,59 @@ const AuthPoliciesPage: NextPageWithLayout = () => { }} authContext="database" /> + + { + setEditorPanelOpen(false) + setSelectedPolicyToEdit(undefined) + setSelectedTable(undefined) + }} + onRunSuccess={() => { + setEditorPanelOpen(false) + setSelectedPolicyToEdit(undefined) + setSelectedTable(undefined) + }} + initialValue={ + selectedPolicyToEdit + ? generatePolicyUpdateSQL(selectedPolicyToEdit) + : selectedTable + ? `create policy "replace_with_policy_name" + on ${schema}.${selectedTable} + for select + to authenticated + using ( + true -- Write your policy condition here +);` + : '' + } + label={ + selectedPolicyToEdit + ? 'RLS policies are just SQL statements that you can alter' + : selectedTable + ? `Create new RLS policy on "${selectedTable}"` + : '' + } + initialPrompt={ + selectedPolicyToEdit + ? `Update the policy with name "${selectedPolicyToEdit.name}" in the ${selectedPolicyToEdit.schema} schema on the ${selectedPolicyToEdit.table} table. It should...` + : selectedTable + ? `Create and name a entirely new RLS policy for the "${selectedTable}" table in the ${schema} schema. The policy should...` + : '' + } + templates={ + selectedPolicyToEdit + ? getGeneralPolicyTemplates( + selectedPolicyToEdit.schema, + selectedPolicyToEdit.table + ).map((template) => ({ + name: template.templateName, + description: template.description, + content: template.statement, + })) + : [] + } + />
) } diff --git a/apps/studio/pages/project/[ref]/database/functions.tsx b/apps/studio/pages/project/[ref]/database/functions.tsx index 0fba9273945b2..c4653c0b56b22 100644 --- a/apps/studio/pages/project/[ref]/database/functions.tsx +++ b/apps/studio/pages/project/[ref]/database/functions.tsx @@ -7,39 +7,32 @@ import FunctionsList from 'components/interfaces/Database/Functions/FunctionsLis import DatabaseLayout from 'components/layouts/DatabaseLayout/DatabaseLayout' import DefaultLayout from 'components/layouts/DefaultLayout' import { ScaffoldContainer, ScaffoldSection } from 'components/layouts/Scaffold' +import { EditorPanel } from 'components/ui/EditorPanel/EditorPanel' import { FormHeader } from 'components/ui/Forms/FormHeader' import NoPermission from 'components/ui/NoPermission' import { DatabaseFunction } from 'data/database-functions/database-functions-query' import { useCheckPermissions, usePermissionsLoaded } from 'hooks/misc/useCheckPermissions' -import { useAppStateSnapshot } from 'state/app-state' import type { NextPageWithLayout } from 'types' const DatabaseFunctionsPage: NextPageWithLayout = () => { const [selectedFunction, setSelectedFunction] = useState() const [showCreateFunctionForm, setShowCreateFunctionForm] = useState(false) const [showDeleteFunctionForm, setShowDeleteFunctionForm] = useState(false) - const { setEditorPanel } = useAppStateSnapshot() const isInlineEditorEnabled = useIsInlineEditorEnabled() + // Local editor panel state + const [editorPanelOpen, setEditorPanelOpen] = useState(false) + const [selectedFunctionForEditor, setSelectedFunctionForEditor] = useState< + DatabaseFunction | undefined + >() + const canReadFunctions = useCheckPermissions(PermissionAction.TENANT_SQL_ADMIN_READ, 'functions') const isPermissionsLoaded = usePermissionsLoaded() const createFunction = () => { if (isInlineEditorEnabled) { - setEditorPanel({ - open: true, - initialValue: `create function function_name() -returns void -language plpgsql -as $$ -begin - -- Write your function logic here -end; -$$;`, - label: 'Create new database function', - saveLabel: 'Create function', - initialPrompt: 'Create a new database function that...', - }) + setSelectedFunctionForEditor(undefined) + setEditorPanelOpen(true) } else { setSelectedFunction(undefined) setShowCreateFunctionForm(true) @@ -48,13 +41,8 @@ $$;`, const editFunction = (fn: DatabaseFunction) => { if (isInlineEditorEnabled) { - setEditorPanel({ - open: true, - initialValue: fn.complete_statement, - label: `Edit function "${fn.name}"`, - saveLabel: 'Update function', - initialPrompt: `Update the database function "${fn.name}" to...`, - }) + setSelectedFunctionForEditor(fn) + setEditorPanelOpen(true) } else { setSelectedFunction(fn) setShowCreateFunctionForm(true) @@ -97,6 +85,40 @@ $$;`, visible={showDeleteFunctionForm} setVisible={setShowDeleteFunctionForm} /> + + { + setEditorPanelOpen(false) + setSelectedFunctionForEditor(undefined) + }} + onClose={() => { + setEditorPanelOpen(false) + setSelectedFunctionForEditor(undefined) + }} + initialValue={ + selectedFunctionForEditor + ? selectedFunctionForEditor.complete_statement + : `create function function_name() +returns void +language plpgsql +as $$ +begin + -- Write your function logic here +end; +$$;` + } + label={ + selectedFunctionForEditor + ? `Edit function "${selectedFunctionForEditor.name}"` + : 'Create new database function' + } + initialPrompt={ + selectedFunctionForEditor + ? `Update the database function "${selectedFunctionForEditor.name}" to...` + : 'Create a new database function that...' + } + /> ) } diff --git a/apps/studio/pages/project/[ref]/database/triggers.tsx b/apps/studio/pages/project/[ref]/database/triggers.tsx index 890b49919cd7c..587f409b39dbb 100644 --- a/apps/studio/pages/project/[ref]/database/triggers.tsx +++ b/apps/studio/pages/project/[ref]/database/triggers.tsx @@ -10,35 +10,30 @@ import TriggersList from 'components/interfaces/Database/Triggers/TriggersList/T import DatabaseLayout from 'components/layouts/DatabaseLayout/DatabaseLayout' import DefaultLayout from 'components/layouts/DefaultLayout' import { ScaffoldContainer, ScaffoldSection } from 'components/layouts/Scaffold' +import { EditorPanel } from 'components/ui/EditorPanel/EditorPanel' import { FormHeader } from 'components/ui/Forms/FormHeader' import NoPermission from 'components/ui/NoPermission' import { useCheckPermissions, usePermissionsLoaded } from 'hooks/misc/useCheckPermissions' -import { useAppStateSnapshot } from 'state/app-state' import type { NextPageWithLayout } from 'types' const TriggersPage: NextPageWithLayout = () => { - const { setEditorPanel } = useAppStateSnapshot() const isInlineEditorEnabled = useIsInlineEditorEnabled() const [selectedTrigger, setSelectedTrigger] = useState() const [showCreateTriggerForm, setShowCreateTriggerForm] = useState(false) const [showDeleteTriggerForm, setShowDeleteTriggerForm] = useState(false) + // Local editor panel state + const [editorPanelOpen, setEditorPanelOpen] = useState(false) + const [selectedTriggerForEditor, setSelectedTriggerForEditor] = useState() + const canReadTriggers = useCheckPermissions(PermissionAction.TENANT_SQL_ADMIN_READ, 'triggers') const isPermissionsLoaded = usePermissionsLoaded() const createTrigger = () => { if (isInlineEditorEnabled) { - setEditorPanel({ - open: true, - initialValue: `create trigger trigger_name -after insert or update or delete on table_name -for each row -execute function function_name();`, - label: 'Create new database trigger', - saveLabel: 'Create trigger', - initialPrompt: 'Create a new database trigger that...', - }) + setSelectedTriggerForEditor(undefined) + setEditorPanelOpen(true) } else { setSelectedTrigger(undefined) setShowCreateTriggerForm(true) @@ -47,14 +42,8 @@ execute function function_name();`, const editTrigger = (trigger: PostgresTrigger) => { if (isInlineEditorEnabled) { - const sql = generateTriggerCreateSQL(trigger) - setEditorPanel({ - open: true, - initialValue: sql, - label: `Edit trigger "${trigger.name}"`, - saveLabel: 'Update trigger', - initialPrompt: `Update the database trigger "${trigger.name}" to...`, - }) + setSelectedTriggerForEditor(trigger) + setEditorPanelOpen(true) } else { setSelectedTrigger(trigger) setShowCreateTriggerForm(true) @@ -98,6 +87,36 @@ execute function function_name();`, visible={showDeleteTriggerForm} setVisible={setShowDeleteTriggerForm} /> + + { + setEditorPanelOpen(false) + setSelectedTriggerForEditor(undefined) + }} + onClose={() => { + setEditorPanelOpen(false) + setSelectedTriggerForEditor(undefined) + }} + initialValue={ + selectedTriggerForEditor + ? generateTriggerCreateSQL(selectedTriggerForEditor) + : `create trigger trigger_name +after insert or update or delete on table_name +for each row +execute function function_name();` + } + label={ + selectedTriggerForEditor + ? `Edit trigger "${selectedTriggerForEditor.name}"` + : 'Create new database trigger' + } + initialPrompt={ + selectedTriggerForEditor + ? `Update the database trigger "${selectedTriggerForEditor.name}" to...` + : 'Create a new database trigger that...' + } + /> ) } diff --git a/apps/studio/pages/project/[ref]/reports/api-overview.tsx b/apps/studio/pages/project/[ref]/reports/api-overview.tsx index 6db01dc456b3b..db5c13970d793 100644 --- a/apps/studio/pages/project/[ref]/reports/api-overview.tsx +++ b/apps/studio/pages/project/[ref]/reports/api-overview.tsx @@ -1,7 +1,9 @@ import ReportFilterBar from 'components/interfaces/Reports/ReportFilterBar' import ReportHeader from 'components/interfaces/Reports/ReportHeader' import ReportPadding from 'components/interfaces/Reports/ReportPadding' +import ReportStickyNav from 'components/interfaces/Reports/ReportStickyNav' import ReportWidget from 'components/interfaces/Reports/ReportWidget' +import { REPORT_DATERANGE_HELPER_LABELS } from 'components/interfaces/Reports/Reports.constants' import { ErrorCountsChartRenderer, NetworkTrafficRenderer, @@ -10,16 +12,12 @@ import { TotalRequestsChartRenderer, } from 'components/interfaces/Reports/renderers/ApiRenderers' import { DatePickerValue } from 'components/interfaces/Settings/Logs/Logs.DatePickers' +import UpgradePrompt from 'components/interfaces/Settings/Logs/UpgradePrompt' import DefaultLayout from 'components/layouts/DefaultLayout' import ReportsLayout from 'components/layouts/ReportsLayout/ReportsLayout' -import ReportStickyNav from 'components/interfaces/Reports/ReportStickyNav' -import { REPORT_DATERANGE_HELPER_LABELS } from 'components/interfaces/Reports/Reports.constants' -import { useState } from 'react' - import { useApiReport } from 'data/reports/api-report-query' import { useReportDateRange } from 'hooks/misc/useReportDateRange' import { NextPageWithLayout } from 'types' -import UpgradePrompt from 'components/interfaces/Settings/Logs/UpgradePrompt' export const ApiReport: NextPageWithLayout = () => { const report = useApiReport() diff --git a/apps/studio/state/app-state.ts b/apps/studio/state/app-state.ts index 9303cc4ed1296..133c53edd2e41 100644 --- a/apps/studio/state/app-state.ts +++ b/apps/studio/state/app-state.ts @@ -1,80 +1,18 @@ -import { proxy, snapshot, subscribe, useSnapshot } from 'valtio' +import { proxy, snapshot, useSnapshot } from 'valtio' import { LOCAL_STORAGE_KEYS as COMMON_LOCAL_STORAGE_KEYS, LOCAL_STORAGE_KEYS } from 'common' -import { SQL_TEMPLATES } from 'components/interfaces/SQLEditor/SQLEditor.queries' - -export type Template = { - name: string - description: string - content: string -} - -type EditorPanelType = { - open: boolean - initialValue?: string - label?: string - saveLabel?: string - onSave?: (value: string) => void - functionName?: string - templates?: Template[] - initialPrompt?: string -} - type DashboardHistoryType = { sql?: string editor?: string } -const INITIAL_EDITOR_PANEL: EditorPanelType = { - open: false, - initialValue: '', - label: '', - saveLabel: '', - initialPrompt: '', - templates: SQL_TEMPLATES.filter((template) => template.type === 'template').map((template) => ({ - name: template.title, - description: template.description, - content: template.sql, - })), -} - const EMPTY_DASHBOARD_HISTORY: DashboardHistoryType = { sql: undefined, editor: undefined, } const getInitialState = () => { - if (typeof window === 'undefined') { - return { - editorPanel: INITIAL_EDITOR_PANEL, - dashboardHistory: EMPTY_DASHBOARD_HISTORY, - activeDocsSection: ['introduction'], - docsLanguage: 'js', - showProjectApiDocs: false, - showCreateBranchModal: false, - showAiSettingsModal: false, - showConnectDialog: false, - ongoingQueriesPanelOpen: false, - mobileMenuOpen: false, - showSidebar: true, - lastRouteBeforeVisitingAccountPage: '', - } - } - - const storedEditor = localStorage.getItem(LOCAL_STORAGE_KEYS.EDITOR_PANEL_STATE) - - let parsedEditorPanel = INITIAL_EDITOR_PANEL - - try { - if (storedEditor) { - parsedEditorPanel = JSON.parse(storedEditor) - } - } catch { - // Ignore parsing errors - } - return { - editorPanel: parsedEditorPanel, dashboardHistory: EMPTY_DASHBOARD_HISTORY, activeDocsSection: ['introduction'], docsLanguage: 'js', @@ -85,6 +23,7 @@ const getInitialState = () => { ongoingQueriesPanelOpen: false, mobileMenuOpen: false, showSidebar: true, + showEditorPanel: false, lastRouteBeforeVisitingAccountPage: '', } } @@ -148,26 +87,6 @@ export const appState = proxy({ appState.ongoingQueriesPanelOpen = value }, - setEditorPanel: (value: Partial) => { - // Reset templates to initial if initialValue is empty - if (value.initialValue === '') { - value.templates = INITIAL_EDITOR_PANEL.templates - } - - if (!value.open) { - value.initialPrompt = INITIAL_EDITOR_PANEL.initialPrompt - } - - appState.editorPanel = { - ...appState.editorPanel, - ...value, - } - }, - - toggleEditorPanel: (value?: boolean) => { - appState.editorPanel.open = value ?? !appState.editorPanel.open - }, - mobileMenuOpen: false, setMobileMenuOpen: (value: boolean) => { appState.mobileMenuOpen = value @@ -179,16 +98,6 @@ export const appState = proxy({ }, }) -// Set up localStorage subscriptions -if (typeof window !== 'undefined') { - subscribe(appState, () => { - localStorage.setItem( - LOCAL_STORAGE_KEYS.EDITOR_PANEL_STATE, - JSON.stringify(appState.editorPanel) - ) - }) -} - export const getAppStateSnapshot = () => snapshot(appState) export const useAppStateSnapshot = (options?: Parameters[1]) => From f6fa4987c5b599239654166731a743577def9130 Mon Sep 17 00:00:00 2001 From: Han Qiao Date: Wed, 6 Aug 2025 17:29:33 +0800 Subject: [PATCH 3/9] chore: remove extra space from curl command (#37713) --- .../EdgeFunctionDetails/EdgeFunctionDetails.constants.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/studio/components/interfaces/Functions/EdgeFunctionDetails/EdgeFunctionDetails.constants.ts b/apps/studio/components/interfaces/Functions/EdgeFunctionDetails/EdgeFunctionDetails.constants.ts index 41bf5a5864478..505a373fa6f9c 100644 --- a/apps/studio/components/interfaces/Functions/EdgeFunctionDetails/EdgeFunctionDetails.constants.ts +++ b/apps/studio/components/interfaces/Functions/EdgeFunctionDetails/EdgeFunctionDetails.constants.ts @@ -12,7 +12,7 @@ export const INVOCATION_TABS: InvocationTab[] = [ label: 'cURL', language: 'bash', code: (functionUrl, _, apiKey) => `curl -L -X POST '${functionUrl}' \\ - -H 'Authorization: Bearer ${apiKey}' \\ ${apiKey.includes('publishable') ? `\n -H 'apikey: ${apiKey}' \\` : ''} + -H 'Authorization: Bearer ${apiKey}' \\${apiKey.includes('publishable') ? `\n -H 'apikey: ${apiKey}' \\` : ''} -H 'Content-Type: application/json' \\ --data '{"name":"Functions"}'`, }, From 6b172a2ee2830c823e17e6501dc1b5444007fe30 Mon Sep 17 00:00:00 2001 From: Francesco Sansalvadore Date: Wed, 6 Aug 2025 13:42:27 +0200 Subject: [PATCH 4/9] chore: remove lw15 banners (#37718) remove lw15 banners --- apps/docs/features/app.providers.tsx | 2 -- apps/www/components/Hero/Hero.tsx | 7 ------- apps/www/components/Nav/index.tsx | 15 +++++---------- packages/ui-patterns/src/Banners/data.json | 6 +++--- .../ui-patterns/src/PromoToast/PromoToast.tsx | 13 +------------ 5 files changed, 9 insertions(+), 34 deletions(-) diff --git a/apps/docs/features/app.providers.tsx b/apps/docs/features/app.providers.tsx index 63b3ace9babbf..f6c2f3089b370 100644 --- a/apps/docs/features/app.providers.tsx +++ b/apps/docs/features/app.providers.tsx @@ -11,7 +11,6 @@ import { QueryClientProvider } from './data/queryClient.client' import { PageTelemetry } from './telemetry/telemetry.client' import { ScrollRestoration } from './ui/helpers.scroll.client' import { ThemeSandbox } from './ui/theme.client' -import { PromoToast } from 'ui-patterns' /** * Global providers that wrap the entire app @@ -28,7 +27,6 @@ function GlobalProviders({ children }: PropsWithChildren) {
- {children} diff --git a/apps/www/components/Hero/Hero.tsx b/apps/www/components/Hero/Hero.tsx index 072185fd20690..7146986b5599a 100644 --- a/apps/www/components/Hero/Hero.tsx +++ b/apps/www/components/Hero/Hero.tsx @@ -16,13 +16,6 @@ const Hero = () => {
-

Build in a weekend diff --git a/apps/www/components/Nav/index.tsx b/apps/www/components/Nav/index.tsx index 5900e708122c0..3313dd542be59 100644 --- a/apps/www/components/Nav/index.tsx +++ b/apps/www/components/Nav/index.tsx @@ -1,4 +1,3 @@ -import { useTheme } from 'next-themes' import Link from 'next/link' import { useRouter } from 'next/router' import React, { useState } from 'react' @@ -14,17 +13,18 @@ import { NavigationMenuList, NavigationMenuTrigger, } from 'ui/src/components/shadcn/ui/navigation-menu' +import { AuthenticatedDropdownMenu } from 'ui-patterns' -import ScrollProgress from '~/components/ScrollProgress' -import { getMenu } from '~/data/nav' +import ScrollProgress from 'components/ScrollProgress' import GitHubButton from './GitHubButton' import HamburgerButton from './HamburgerMenu' import MenuItem from './MenuItem' import MobileMenu from './MobileMenu' import RightClickBrandLogo from './RightClickBrandLogo' -import { useSendTelemetryEvent } from '~/lib/telemetry' +import { useSendTelemetryEvent } from 'lib/telemetry' import useDropdownMenu from './useDropdownMenu' -import { AnnouncementBanner, AuthenticatedDropdownMenu } from 'ui-patterns' + +import { getMenu } from 'data/nav' interface Props { hideNavbar: boolean @@ -32,7 +32,6 @@ interface Props { } const Nav = ({ hideNavbar, stickyNavbar = true }: Props) => { - const { resolvedTheme } = useTheme() const router = useRouter() const { width } = useWindowSize() const [open, setOpen] = useState(false) @@ -42,7 +41,6 @@ const Nav = ({ hideNavbar, stickyNavbar = true }: Props) => { const user = useUser() const userMenu = useDropdownMenu(user) - const isHomePage = router.pathname === '/' const isLaunchWeekPage = router.pathname.includes('/launch-week') const isLaunchWeekXPage = router.pathname === '/launch-week/x' const isGAWeekSection = router.pathname.startsWith('/ga-week') @@ -67,11 +65,8 @@ const Nav = ({ hideNavbar, stickyNavbar = true }: Props) => { return null } - // const showDarkLogo = isLaunchWeekPage || resolvedTheme?.includes('dark')! || isHomePage - return ( <> -
{ />
{announcement.text} -

- July 14—18 -

+

@@ -62,15 +60,6 @@ const PromoToast = () => { Dismiss
- {/* */}
) } From 7eae9ad67acc4fefdc99da3a2f6a87ab8fbae860 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kevin=20Gr=C3=BCneberg?= Date: Wed, 6 Aug 2025 21:03:01 +0800 Subject: [PATCH 5/9] fix: docs links resulting in 404 (#37720) --- .../BillingBreakdown/UpcomingInvoice.tsx | 62 ++++++++++++------- .../SubscriptionPlanUpdateDialog.tsx | 6 +- 2 files changed, 42 insertions(+), 26 deletions(-) diff --git a/apps/studio/components/interfaces/Organization/BillingSettings/BillingBreakdown/UpcomingInvoice.tsx b/apps/studio/components/interfaces/Organization/BillingSettings/BillingBreakdown/UpcomingInvoice.tsx index 441aead5490d6..fca0edd2a2404 100644 --- a/apps/studio/components/interfaces/Organization/BillingSettings/BillingBreakdown/UpcomingInvoice.tsx +++ b/apps/studio/components/interfaces/Organization/BillingSettings/BillingBreakdown/UpcomingInvoice.tsx @@ -20,38 +20,50 @@ export interface UpcomingInvoiceProps { const usageBillingDocsLink: { [K in PricingMetric]?: string } = { [PricingMetric.MONTHLY_ACTIVE_USERS]: - '/docs/guides/platform/manage-your-usage/monthly-active-users', + 'https://supabase.com/docs/guides/platform/manage-your-usage/monthly-active-users', [PricingMetric.MONTHLY_ACTIVE_SSO_USERS]: - '/docs/guides/platform/manage-your-usage/monthly-active-users-sso', + 'https://supabase.com/docs/guides/platform/manage-your-usage/monthly-active-users-sso', [PricingMetric.MONTHLY_ACTIVE_THIRD_PARTY_USERS]: - '/docs/guides/platform/manage-your-usage/monthly-active-users-third-party', - [PricingMetric.AUTH_MFA_PHONE]: '/docs/guides/platform/manage-your-usage/advanced-mfa-phone', + 'https://supabase.com/docs/guides/platform/manage-your-usage/monthly-active-users-third-party', + [PricingMetric.AUTH_MFA_PHONE]: + 'https://supabase.com/docs/guides/platform/manage-your-usage/advanced-mfa-phone', - [PricingMetric.EGRESS]: '/docs/guides/platform/manage-your-usage/egress', + [PricingMetric.EGRESS]: 'https://supabase.com/docs/guides/platform/manage-your-usage/egress', [PricingMetric.FUNCTION_INVOCATIONS]: - '/docs/guides/platform/manage-your-usage/edge-function-invocations', + 'https://supabase.com/docs/guides/platform/manage-your-usage/edge-function-invocations', - [PricingMetric.STORAGE_SIZE]: '/docs/guides/platform/manage-your-usage/storage-size', + [PricingMetric.STORAGE_SIZE]: + 'https://supabase.com/docs/guides/platform/manage-your-usage/storage-size', [PricingMetric.STORAGE_IMAGES_TRANSFORMED]: - '/docs/guides/platform/manage-your-usage/storage-image-transformations', + 'https://supabase.com/docs/guides/platform/manage-your-usage/storage-image-transformations', [PricingMetric.REALTIME_MESSAGE_COUNT]: - '/docs/guides/platform/manage-your-usage/realtime-messages', + 'https://supabase.com/docs/guides/platform/manage-your-usage/realtime-messages', [PricingMetric.REALTIME_PEAK_CONNECTIONS]: - '/docs/guides/platform/manage-your-usage/realtime-peak-connections', - - [PricingMetric.CUSTOM_DOMAIN]: '/docs/guides/platform/manage-your-usage/custom-domains', - [PricingMetric.IPV4]: '/docs/guides/platform/manage-your-usage/ipv4', - [PricingMetric.PITR_7]: '/docs/guides/platform/manage-your-usage/point-in-time-recovery', - [PricingMetric.PITR_14]: '/docs/guides/platform/manage-your-usage/point-in-time-recovery', - [PricingMetric.PITR_28]: '/docs/guides/platform/manage-your-usage/point-in-time-recovery', - [PricingMetric.DISK_SIZE_GB_HOURS_GP3]: '/docs/guides/platform/manage-your-usage/disk-size', - [PricingMetric.DISK_SIZE_GB_HOURS_IO2]: '/docs/guides/platform/manage-your-usage/disk-size', - [PricingMetric.DISK_IOPS_GP3]: '/docs/guides/platform/manage-your-usage/disk-iops', - [PricingMetric.DISK_IOPS_IO2]: '/docs/guides/platform/manage-your-usage/disk-iops', - [PricingMetric.DISK_THROUGHPUT_GP3]: '/docs/guides/platform/manage-your-usage/disk-throughput', - [PricingMetric.LOG_DRAIN]: '/docs/guides/platform/manage-your-usage/log-drains', + 'https://supabase.com/docs/guides/platform/manage-your-usage/realtime-peak-connections', + + [PricingMetric.CUSTOM_DOMAIN]: + 'https://supabase.com/docs/guides/platform/manage-your-usage/custom-domains', + [PricingMetric.IPV4]: 'https://supabase.com/docs/guides/platform/manage-your-usage/ipv4', + [PricingMetric.PITR_7]: + 'https://supabase.com/docs/guides/platform/manage-your-usage/point-in-time-recovery', + [PricingMetric.PITR_14]: + 'https://supabase.com/docs/guides/platform/manage-your-usage/point-in-time-recovery', + [PricingMetric.PITR_28]: + 'https://supabase.com/docs/guides/platform/manage-your-usage/point-in-time-recovery', + [PricingMetric.DISK_SIZE_GB_HOURS_GP3]: + 'https://supabase.com/docs/guides/platform/manage-your-usage/disk-size', + [PricingMetric.DISK_SIZE_GB_HOURS_IO2]: + 'https://supabase.com/docs/guides/platform/manage-your-usage/disk-size', + [PricingMetric.DISK_IOPS_GP3]: + 'https://supabase.com/docs/guides/platform/manage-your-usage/disk-iops', + [PricingMetric.DISK_IOPS_IO2]: + 'https://supabase.com/docs/guides/platform/manage-your-usage/disk-iops', + [PricingMetric.DISK_THROUGHPUT_GP3]: + 'https://supabase.com/docs/guides/platform/manage-your-usage/disk-throughput', + [PricingMetric.LOG_DRAIN]: + 'https://supabase.com/docs/guides/platform/manage-your-usage/log-drains', } const UpcomingInvoice = ({ slug }: UpcomingInvoiceProps) => { @@ -133,7 +145,7 @@ const UpcomingInvoice = ({ slug }: UpcomingInvoiceProps) => { compute costs starting at $10/month, independent of activity. See{' '} docs @@ -153,7 +165,9 @@ const UpcomingInvoice = ({ slug }: UpcomingInvoiceProps) => { Compute, Disk Size, provisioned Disk IOPS, provisioned Disk Throughput, and IPv4. See{' '} docs diff --git a/apps/studio/components/interfaces/Organization/BillingSettings/Subscription/SubscriptionPlanUpdateDialog.tsx b/apps/studio/components/interfaces/Organization/BillingSettings/Subscription/SubscriptionPlanUpdateDialog.tsx index cc82d7fc1bfd0..3a5ff8dca18bc 100644 --- a/apps/studio/components/interfaces/Organization/BillingSettings/Subscription/SubscriptionPlanUpdateDialog.tsx +++ b/apps/studio/components/interfaces/Organization/BillingSettings/Subscription/SubscriptionPlanUpdateDialog.tsx @@ -351,7 +351,9 @@ export const SubscriptionPlanUpdateDialog = ({ Credits; additional projects start at $10 /month regardless of usage.{' '} Learn more @@ -587,7 +589,7 @@ export const SubscriptionPlanUpdateDialog = ({ /month regardless of usage.{' '}

From 25fa7dd391af85a3e0d7e60fe67fd6faff10608f Mon Sep 17 00:00:00 2001 From: "kemal.earth" <606977+kemaldotearth@users.noreply.github.com> Date: Wed, 6 Aug 2025 14:49:21 +0100 Subject: [PATCH 6/9] fix(studio): small clean up of block classes (#37721) fix: small clean up of block classes My linter was throwing problems because we had two Tailwind block element classes applied to the same elements. Clears that up. --- .../pages/project/[ref]/settings/auth.tsx | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/apps/studio/pages/project/[ref]/settings/auth.tsx b/apps/studio/pages/project/[ref]/settings/auth.tsx index 9869b02e6f0f2..ce87957dfd9c0 100644 --- a/apps/studio/pages/project/[ref]/settings/auth.tsx +++ b/apps/studio/pages/project/[ref]/settings/auth.tsx @@ -17,77 +17,77 @@ const ProjectSettings: NextPageWithLayout = () => {

General user signup Password settings in email provider User sessions Refresh tokens Bot and abuse protection SMTP settings Access token expiry Multifactor authentication Third party authentication Max request duration Max direct database connections From f5f0876b4e5913421d9b85e8cc558ff547a397cb Mon Sep 17 00:00:00 2001 From: Rafael Chacon Date: Wed, 6 Aug 2025 10:03:16 -0400 Subject: [PATCH 7/9] adds self to humans.txt (#37723) Co-authored-by: Rafael Chacon --- apps/docs/public/humans.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/docs/public/humans.txt b/apps/docs/public/humans.txt index 5024bf43949fa..1d2fe38b68bdf 100644 --- a/apps/docs/public/humans.txt +++ b/apps/docs/public/humans.txt @@ -97,6 +97,7 @@ Pavel Borisov Paweł Gulbinowicz Peter Lyn Qiao Han +Rafael Chacón Raminder Singh Riccardo Busetti Rodrigo Mansueli From ef93da79b015c244225d3a855db29254d08a62e8 Mon Sep 17 00:00:00 2001 From: Charis <26616127+charislam@users.noreply.github.com> Date: Wed, 6 Aug 2025 10:21:51 -0400 Subject: [PATCH 8/9] feat(docs): code samples with ts type stripping (#37695) * feat(docs): code samples with ts type stripping Introduce a new option to `$CodeSample`, `convertToJs`, which takes a code sample written in TypeScript and strips the types to produce a JavaScript version. Adds tests for type stripping. * Clarify instructions --------- Co-authored-by: Chris Chinchilla --- apps/docs/app/contributing/content.mdx | 22 ++ .../features/directives/CodeSample.test.ts | 200 ++++++++++++++++++ apps/docs/features/directives/CodeSample.ts | 39 +++- apps/docs/package.json | 1 + examples/_internal/fixtures/typescript.ts | 43 ++++ pnpm-lock.yaml | 64 ++++-- 6 files changed, 344 insertions(+), 25 deletions(-) create mode 100644 examples/_internal/fixtures/typescript.ts diff --git a/apps/docs/app/contributing/content.mdx b/apps/docs/app/contributing/content.mdx index d56648eb1f263..2a5086cd2d922 100644 --- a/apps/docs/app/contributing/content.mdx +++ b/apps/docs/app/contributing/content.mdx @@ -181,6 +181,8 @@ Line numbers are 1-indexed and inclusive. lines={[[1, 3], [5, -1]]} {/* Optional, displays as a file name on the code block */} meta="name=display/path.js" +{/* Optional, strips TypeScript types to produce JavaScript, which you also include with another */} +convertToJs={true} /> ``` @@ -195,11 +197,31 @@ commit="1623aa9b95ec90e21c5bae5a0d50dcf272abe92f" path="/relative/path/from/root.js" lines={[[1, 3], [5, -1]]} meta="name=display/path.js" +convertToJs={true} /> ``` The repo must be public, the org must be on the allow list, and the commit must be an immutable SHA (not a mutable tag or branch name). +#### Converting TypeScript to JavaScript + +You can automatically strip TypeScript types from code samples to produce JavaScript using the `convertToJs` option: + +```mdx +<$CodeSample +path="/path/to/typescript-file.ts" +lines={[[1, -1]]} +convertToJs={true} +/> +``` + +This is useful when you want to show JavaScript examples from TypeScript source files. The conversion: + +- Removes all TypeScript type annotations, interfaces, and type definitions +- Converts the language identifier from `typescript` to `javascript` (or `tsx` to `jsx`) +- Happens before any line selection or elision processing +- Defaults to `false` to preserve TypeScript code when not specified + #### Multi-file code samples Multi-file code samples use the `<$CodeTabs>` annotation: diff --git a/apps/docs/features/directives/CodeSample.test.ts b/apps/docs/features/directives/CodeSample.test.ts index a3ae68b0e1ec2..3c8e83df2fb3f 100644 --- a/apps/docs/features/directives/CodeSample.test.ts +++ b/apps/docs/features/directives/CodeSample.test.ts @@ -1,5 +1,6 @@ import { afterAll, beforeAll, describe, it, expect, vi } from 'vitest' +import { stripIndent } from 'common-tags' import { fromMarkdown } from 'mdast-util-from-markdown' import { mdxFromMarkdown, mdxToMarkdown } from 'mdast-util-mdx' import { toMarkdown } from 'mdast-util-to-markdown' @@ -18,6 +19,42 @@ vi.mock('~/lib/constants', () => ({ IS_PLATFORM: true, })) +/** + * Checks if str1 contains str2, ignoring leading whitespace on each line. + * Lines are matched if they have the same content after trimming leading whitespace. + * + * @param str1 - The string to search in + * @param str2 - The string to search for + * @returns true if str1 contains str2 modulo leading whitespace, false otherwise + */ +export function containsStringIgnoringLeadingWhitespace(str1: string, str2: string): boolean { + const lines1 = str1.split('\n').map((line) => line.trimStart()) + const lines2 = str2.split('\n').map((line) => line.trimStart()) + + if (lines2.length === 0) { + return true + } + + if (lines2.length > lines1.length) { + return false + } + + for (let i = 0; i <= lines1.length - lines2.length; i++) { + let matches = true + for (let j = 0; j < lines2.length; j++) { + if (lines1[i + j] !== lines2[j]) { + matches = false + break + } + } + if (matches) { + return true + } + } + + return false +} + describe('$CodeSample', () => { beforeAll(() => { env = process.env @@ -533,6 +570,169 @@ Some more text. expect(output).toEqual(expected) }) + + describe('convertToJs option', () => { + it('should convert TypeScript to JavaScript when convertToJs is true', async () => { + const markdown = ` +# Embed code sample + +<$CodeSample path="/_internal/fixtures/typescript.ts" lines={[[1, -1]]} convertToJs={true} /> + +Some more text. +`.trim() + + const mdast = fromMarkdown(markdown, { + mdastExtensions: [mdxFromMarkdown()], + extensions: [mdxjs()], + }) + const transformed = await transformWithMock(mdast) + const output = toMarkdown(transformed, { extensions: [mdxToMarkdown()] }) + + const expected = stripIndent` + \`\`\`javascript + const users = [ + { id: 1, name: 'John', email: 'john@example.com' }, + { id: 2, name: 'Jane' }, + ]; + + function getUserById(id) { + return users.find((user) => user.id === id); + } + + function createUser(name, email) { + const newId = Math.max(...users.map((u) => u.id)) + 1; + const newUser = { id: newId, name }; + if (email) { + newUser.email = email; + } + users.push(newUser); + return newUser; + } + + class UserManager { + users = []; + + constructor(initialUsers = []) { + this.users = initialUsers; + } + + addUser(user) { + this.users.push(user); + } + + getUsers() { + return [...this.users]; + } + } + \`\`\` + `.trim() + + expect(containsStringIgnoringLeadingWhitespace(output, expected)).toBe(true) + }) + + it('should preserve TypeScript when convertToJs is false', async () => { + const markdown = ` +# Embed code sample + +<$CodeSample path="/_internal/fixtures/typescript.ts" lines={[[1, -1]]} convertToJs={false} /> + +Some more text. +`.trim() + + const mdast = fromMarkdown(markdown, { + mdastExtensions: [mdxFromMarkdown()], + extensions: [mdxjs()], + }) + const transformed = await transformWithMock(mdast) + const output = toMarkdown(transformed, { extensions: [mdxToMarkdown()] }) + + // The output should contain TypeScript types + expect(output).toContain('```typescript') + expect(output).toContain('interface User') + expect(output).toContain('type Status') + expect(output).toContain(': User') + expect(output).toContain(': number') + expect(output).toContain(': string') + }) + + it('should preserve TypeScript when convertToJs is not specified (default)', async () => { + const markdown = ` +# Embed code sample + +<$CodeSample path="/_internal/fixtures/typescript.ts" lines={[[1, -1]]} /> + +Some more text. +`.trim() + + const mdast = fromMarkdown(markdown, { + mdastExtensions: [mdxFromMarkdown()], + extensions: [mdxjs()], + }) + const transformed = await transformWithMock(mdast) + const output = toMarkdown(transformed, { extensions: [mdxToMarkdown()] }) + + // The output should contain TypeScript types by default + expect(output).toContain('```typescript') + expect(output).toContain('interface User') + expect(output).toContain('type Status') + }) + + it('should convert types but preserve line selection and elision', async () => { + const markdown = ` +# Embed code sample + +<$CodeSample path="/_internal/fixtures/typescript.ts" lines={[[1, 4], [10, -1]]} convertToJs={true} /> + +Some more text. +`.trim() + + const mdast = fromMarkdown(markdown, { + mdastExtensions: [mdxFromMarkdown()], + extensions: [mdxjs()], + }) + const transformed = await transformWithMock(mdast) + const output = toMarkdown(transformed, { extensions: [mdxToMarkdown()] }) + + const expected = ` + \`\`\`javascript + const users = [ + { id: 1, name: 'John', email: 'john@example.com' }, + { id: 2, name: 'Jane' }, + ]; + + // ... + + function createUser(name, email) { + const newId = Math.max(...users.map((u) => u.id)) + 1; + const newUser = { id: newId, name }; + if (email) { + newUser.email = email; + } + users.push(newUser); + return newUser; + } + + class UserManager { + users = []; + + constructor(initialUsers = []) { + this.users = initialUsers; + } + + addUser(user) { + this.users.push(user); + } + + getUsers() { + return [...this.users]; + } + } + \`\`\` + `.trim() + + expect(containsStringIgnoringLeadingWhitespace(output, expected)).toBe(true) + }) + }) }) describe('_createElidedLine', () => { diff --git a/apps/docs/features/directives/CodeSample.ts b/apps/docs/features/directives/CodeSample.ts index d962ca8486a63..dc505c0bda1ba 100644 --- a/apps/docs/features/directives/CodeSample.ts +++ b/apps/docs/features/directives/CodeSample.ts @@ -11,6 +11,7 @@ * lines={[1, 2], [5, 7]} // -1 may be used in end position as an alias for the last line, e.g., [1, -1] * meta="utils/client.ts" // Optional, for displaying a file path on the code block * hideElidedLines={true} // Optional, for hiding elided lines in the code block + * convertToJs={true} // Optional, strips TypeScript types to produce JavaScript * /> * ``` * @@ -26,6 +27,7 @@ * lines={[1, 2], [5, 7]} // -1 may be used in end position as an alias for the last line, e.g., [1, -1] * meta="utils/client.ts" // Optional, for displaying a file path on the code block * hideElidedLines={true} // Optional, for hiding elided lines in the code block + * convertToJs={true} // Optional, strips TypeScript types to produce JavaScript * /> */ @@ -33,8 +35,10 @@ import * as acorn from 'acorn' import tsPlugin from 'acorn-typescript' import { type DefinitionContent, type BlockContent, type Code, type Root } from 'mdast' import type { MdxJsxAttributeValueExpression, MdxJsxFlowElement } from 'mdast-util-mdx-jsx' +import assert from 'node:assert' import { readFile } from 'node:fs/promises' import { join } from 'node:path' +import { removeTypes } from 'remove-types' import { type Parent } from 'unist' import { visitParents } from 'unist-util-visit-parents' import { z, type SafeParseError } from 'zod' @@ -69,6 +73,12 @@ type AdditionalMeta = { codeHikeAncestorParent: Parent | null } +const booleanValidator = z.union([z.boolean(), z.string(), z.undefined()]).transform((v) => { + if (typeof v === 'boolean') return v + if (typeof v === 'string') return v === 'true' + return false +}) + const codeSampleExternalSchema = z.object({ external: z.coerce.boolean().refine((v) => v === true), org: z.enum(ALLOW_LISTED_GITHUB_ORGS, { @@ -80,6 +90,7 @@ const codeSampleExternalSchema = z.object({ lines: linesValidator, meta: z.string().optional(), hideElidedLines: z.coerce.boolean().default(false), + convertToJs: booleanValidator, }) type ICodeSampleExternal = z.infer & AdditionalMeta @@ -92,6 +103,7 @@ const codeSampleInternalSchema = z.object({ lines: linesValidator, meta: z.string().optional(), hideElidedLines: z.coerce.boolean().default(false), + convertToJs: booleanValidator, }) type ICodeSampleInternal = z.infer & AdditionalMeta @@ -114,7 +126,7 @@ interface Dependencies { export function codeSampleRemark(deps: Dependencies) { return async function transform(tree: Root) { const contentMap = await fetchSourceCodeContent(tree, deps) - rewriteNodes(contentMap) + await rewriteNodes(contentMap) return tree } @@ -154,6 +166,7 @@ async function fetchSourceCodeContent(tree: Root, deps: Dependencies) { const hideElidedLines = getAttributeValueExpression( getAttributeValue(node, 'hideElidedLines') ) + const convertToJs = getAttributeValueExpression(getAttributeValue(node, 'convertToJs')) const result = codeSampleExternalSchema.safeParse({ external: isExternal, @@ -164,6 +177,7 @@ async function fetchSourceCodeContent(tree: Root, deps: Dependencies) { lines, meta, hideElidedLines, + convertToJs, }) if (!result.success) { @@ -197,6 +211,7 @@ async function fetchSourceCodeContent(tree: Root, deps: Dependencies) { const hideElidedLines = getAttributeValueExpression( getAttributeValue(node, 'hideElidedLines') ) + const convertToJs = getAttributeValueExpression(getAttributeValue(node, 'convertToJs')) const result = codeSampleInternalSchema.safeParse({ external: isExternal, @@ -204,6 +219,7 @@ async function fetchSourceCodeContent(tree: Root, deps: Dependencies) { lines, meta, hideElidedLines, + convertToJs, }) if (!result.success) { @@ -234,15 +250,30 @@ async function fetchSourceCodeContent(tree: Root, deps: Dependencies) { return nodeContentMap } -function rewriteNodes(contentMap: Map) { +async function rewriteNodes(contentMap: Map) { for (const [node, [meta, content]] of contentMap) { - const lang = matchLang(meta.path.split('.').pop() || '') + let lang = matchLang(meta.path.split('.').pop() || '') const source = isExternalSource(meta) ? `https://github.com/${meta.org}/${meta.repo}/blob/${meta.commit}${meta.path}` : `https://github.com/supabase/supabase/blob/${process.env.NEXT_PUBLIC_VERCEL_GIT_COMMIT_SHA ?? 'master'}/examples${meta.path}` - const elidedContent = redactLines(content, meta.lines, lang, meta.hideElidedLines) + let processedContent = content + if (meta.convertToJs) { + processedContent = await removeTypes(content) + // Convert TypeScript/TSX language to JavaScript/JSX when converting types + assert( + lang === 'typescript' || lang === 'tsx', + 'Type stripping to JS is only supported for TypeScript and TSX' + ) + if (lang === 'typescript') { + lang = 'javascript' + } else if (lang === 'tsx') { + lang = 'jsx' + } + } + + const elidedContent = redactLines(processedContent, meta.lines, lang, meta.hideElidedLines) const replacementContent: MdxJsxFlowElement | Code = meta.codeHikeAncestor ? { diff --git a/apps/docs/package.json b/apps/docs/package.json index 96c1cdb065a5c..c3a310ff02699 100644 --- a/apps/docs/package.json +++ b/apps/docs/package.json @@ -107,6 +107,7 @@ "remark-emoji": "^3.1.2", "remark-gfm": "^3.0.1", "remark-math": "^6.0.0", + "remove-types": "1.0.0", "server-only": "^0.0.1", "shared-data": "workspace:*", "ui": "workspace:*", diff --git a/examples/_internal/fixtures/typescript.ts b/examples/_internal/fixtures/typescript.ts new file mode 100644 index 0000000000000..ef841da6e66b4 --- /dev/null +++ b/examples/_internal/fixtures/typescript.ts @@ -0,0 +1,43 @@ +type Status = 'active' | 'inactive' + +interface User { + id: number + name: string + email?: string + status?: Status +} + +const users: Array = [ + { id: 1, name: 'John', email: 'john@example.com' }, + { id: 2, name: 'Jane' }, +] + +function getUserById(id: number): User | undefined { + return users.find((user) => user.id === id) +} + +function createUser(name: string, email: string): User { + const newId = Math.max(...users.map((u) => u.id)) + 1 + const newUser: User = { id: newId, name } + if (email) { + newUser.email = email + } + users.push(newUser) + return newUser +} + +class UserManager { + users: Array = [] + + constructor(initialUsers = []) { + this.users = initialUsers + } + + addUser(user: User) { + this.users.push(user) + } + + getUsers() { + return [...this.users] + } +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 0f53cdb760d1a..6cbe691064396 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -332,7 +332,7 @@ importers: version: 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@sentry/nextjs': specifier: ^9.15.0 - version: 9.15.0(@opentelemetry/context-async-hooks@1.30.1(@opentelemetry/api@1.9.0))(@opentelemetry/core@1.30.1(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.57.2(@opentelemetry/api@1.9.0)(supports-color@8.1.1))(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(encoding@0.1.13)(next@15.3.3(@opentelemetry/api@1.9.0)(@playwright/test@1.53.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.77.4))(react@18.3.1)(supports-color@8.1.1)(webpack@5.94.0) + version: 9.15.0(@opentelemetry/context-async-hooks@1.30.1(@opentelemetry/api@1.9.0))(@opentelemetry/core@1.30.1(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.57.2(@opentelemetry/api@1.9.0)(supports-color@8.1.1))(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(encoding@0.1.13)(next@15.3.3(@babel/core@7.26.10(supports-color@8.1.1))(@opentelemetry/api@1.9.0)(@playwright/test@1.53.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.77.4))(react@18.3.1)(supports-color@8.1.1)(webpack@5.94.0) '@supabase/supabase-js': specifier: 'catalog:' version: 2.49.3 @@ -452,7 +452,7 @@ importers: version: 0.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) nuqs: specifier: ^1.19.1 - version: 1.19.1(next@15.3.3(@opentelemetry/api@1.9.0)(@playwright/test@1.53.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.77.4)) + version: 1.19.1(next@15.3.3(@babel/core@7.26.10(supports-color@8.1.1))(@opentelemetry/api@1.9.0)(@playwright/test@1.53.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.77.4)) openai: specifier: ^4.20.1 version: 4.71.1(encoding@0.1.13)(zod@3.23.8) @@ -498,6 +498,9 @@ importers: remark-math: specifier: ^6.0.0 version: 6.0.0(supports-color@8.1.1) + remove-types: + specifier: 1.0.0 + version: 1.0.0(supports-color@8.1.1) server-only: specifier: ^0.0.1 version: 0.0.1 @@ -534,7 +537,7 @@ importers: devDependencies: '@graphiql/toolkit': specifier: ^0.9.1 - version: 0.9.1(@types/node@22.13.14)(graphql-ws@6.0.4(graphql@16.11.0)(ws@8.18.3))(graphql@16.11.0) + version: 0.9.1(@types/node@22.13.14)(graphql-ws@6.0.4(graphql@16.11.0)(ws@8.18.1))(graphql@16.11.0) '@graphql-codegen/cli': specifier: 5.0.5 version: 5.0.5(@parcel/watcher@2.5.1)(@types/node@22.13.14)(encoding@0.1.13)(graphql-sock@1.0.1(graphql@16.11.0))(graphql@16.11.0)(supports-color@8.1.1)(typescript@5.5.2) @@ -606,7 +609,7 @@ importers: version: 13.2.2 graphiql: specifier: ^4.0.2 - version: 4.0.2(@codemirror/language@6.11.0)(@emotion/is-prop-valid@1.2.1)(@types/node@22.13.14)(@types/react-dom@18.3.0)(@types/react@18.3.3)(graphql-ws@6.0.4(graphql@16.11.0)(ws@8.18.3))(graphql@16.11.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 4.0.2(@codemirror/language@6.11.0)(@emotion/is-prop-valid@1.2.1)(@types/node@22.13.14)(@types/react-dom@18.3.0)(@types/react@18.3.3)(graphql-ws@6.0.4(graphql@16.11.0)(ws@8.18.1))(graphql@16.11.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) openapi-types: specifier: ^12.1.3 version: 12.1.3 @@ -16047,6 +16050,9 @@ packages: remove-trailing-spaces@1.0.9: resolution: {integrity: sha512-xzG7w5IRijvIkHIjDk65URsJJ7k4J95wmcArY5PRcmjldIOl7oTvG8+X2Ag690R7SfwiOcHrWZKVc1Pp5WIOzA==} + remove-types@1.0.0: + resolution: {integrity: sha512-G7Hk1Q+UJ5DvlNAoJZObxANkBZGiGdp589rVcTW/tYqJWJ5rwfraSnKSQaETN8Epaytw8J40nS/zC7bcHGv36w==} + rename-keys@1.2.0: resolution: {integrity: sha512-U7XpAktpbSgHTRSNRrjKSrjYkZKuhUukfoBlXWXUExCAqhzh1TU3BDRAfJmarcl5voKS+pbKU9MvyLWKZ4UEEg==} engines: {node: '>= 0.8.0'} @@ -20841,9 +20847,9 @@ snapshots: '@gar/promisify@1.1.3': {} - '@graphiql/plugin-doc-explorer@0.0.1(@codemirror/language@6.11.0)(@emotion/is-prop-valid@1.2.1)(@types/node@22.13.14)(@types/react-dom@18.3.0)(@types/react@18.3.3)(graphql-ws@6.0.4(graphql@16.11.0)(ws@8.18.3))(graphql@16.11.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@graphiql/plugin-doc-explorer@0.0.1(@codemirror/language@6.11.0)(@emotion/is-prop-valid@1.2.1)(@types/node@22.13.14)(@types/react-dom@18.3.0)(@types/react@18.3.3)(graphql-ws@6.0.4(graphql@16.11.0)(ws@8.18.1))(graphql@16.11.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@graphiql/react': 0.32.0(@codemirror/language@6.11.0)(@emotion/is-prop-valid@1.2.1)(@types/node@22.13.14)(@types/react-dom@18.3.0)(@types/react@18.3.3)(graphql-ws@6.0.4(graphql@16.11.0)(ws@8.18.3))(graphql@16.11.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@graphiql/react': 0.32.0(@codemirror/language@6.11.0)(@emotion/is-prop-valid@1.2.1)(@types/node@22.13.14)(@types/react-dom@18.3.0)(@types/react@18.3.3)(graphql-ws@6.0.4(graphql@16.11.0)(ws@8.18.1))(graphql@16.11.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@headlessui/react': 2.2.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) graphql: 16.11.0 react: 18.3.1 @@ -20857,10 +20863,10 @@ snapshots: - '@types/react-dom' - graphql-ws - '@graphiql/plugin-history@0.0.2(@codemirror/language@6.11.0)(@emotion/is-prop-valid@1.2.1)(@types/node@22.13.14)(@types/react-dom@18.3.0)(@types/react@18.3.3)(graphql-ws@6.0.4(graphql@16.11.0)(ws@8.18.3))(graphql@16.11.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@graphiql/plugin-history@0.0.2(@codemirror/language@6.11.0)(@emotion/is-prop-valid@1.2.1)(@types/node@22.13.14)(@types/react-dom@18.3.0)(@types/react@18.3.3)(graphql-ws@6.0.4(graphql@16.11.0)(ws@8.18.1))(graphql@16.11.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@graphiql/react': 0.32.0(@codemirror/language@6.11.0)(@emotion/is-prop-valid@1.2.1)(@types/node@22.13.14)(@types/react-dom@18.3.0)(@types/react@18.3.3)(graphql-ws@6.0.4(graphql@16.11.0)(ws@8.18.3))(graphql@16.11.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@graphiql/toolkit': 0.11.2(@types/node@22.13.14)(graphql-ws@6.0.4(graphql@16.11.0)(ws@8.18.3))(graphql@16.11.0) + '@graphiql/react': 0.32.0(@codemirror/language@6.11.0)(@emotion/is-prop-valid@1.2.1)(@types/node@22.13.14)(@types/react-dom@18.3.0)(@types/react@18.3.3)(graphql-ws@6.0.4(graphql@16.11.0)(ws@8.18.1))(graphql@16.11.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@graphiql/toolkit': 0.11.2(@types/node@22.13.14)(graphql-ws@6.0.4(graphql@16.11.0)(ws@8.18.1))(graphql@16.11.0) react: 18.3.1 react-compiler-runtime: 19.1.0-rc.1(react@18.3.1) react-dom: 18.3.1(react@18.3.1) @@ -20900,9 +20906,9 @@ snapshots: - '@types/react-dom' - graphql-ws - '@graphiql/react@0.32.0(@codemirror/language@6.11.0)(@emotion/is-prop-valid@1.2.1)(@types/node@22.13.14)(@types/react-dom@18.3.0)(@types/react@18.3.3)(graphql-ws@6.0.4(graphql@16.11.0)(ws@8.18.3))(graphql@16.11.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@graphiql/react@0.32.0(@codemirror/language@6.11.0)(@emotion/is-prop-valid@1.2.1)(@types/node@22.13.14)(@types/react-dom@18.3.0)(@types/react@18.3.3)(graphql-ws@6.0.4(graphql@16.11.0)(ws@8.18.1))(graphql@16.11.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@graphiql/toolkit': 0.11.2(@types/node@22.13.14)(graphql-ws@6.0.4(graphql@16.11.0)(ws@8.18.3))(graphql@16.11.0) + '@graphiql/toolkit': 0.11.2(@types/node@22.13.14)(graphql-ws@6.0.4(graphql@16.11.0)(ws@8.18.1))(graphql@16.11.0) '@radix-ui/react-dialog': 1.1.11(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-dropdown-menu': 2.1.12(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-tooltip': 1.2.4(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -20929,13 +20935,13 @@ snapshots: - '@types/react-dom' - graphql-ws - '@graphiql/toolkit@0.11.2(@types/node@22.13.14)(graphql-ws@6.0.4(graphql@16.11.0)(ws@8.18.3))(graphql@16.11.0)': + '@graphiql/toolkit@0.11.2(@types/node@22.13.14)(graphql-ws@6.0.4(graphql@16.11.0)(ws@8.18.1))(graphql@16.11.0)': dependencies: '@n1ru4l/push-pull-async-iterable-iterator': 3.2.0 graphql: 16.11.0 meros: 1.3.0(@types/node@22.13.14) optionalDependencies: - graphql-ws: 6.0.4(graphql@16.11.0)(ws@8.18.3) + graphql-ws: 6.0.4(graphql@16.11.0)(ws@8.18.1) transitivePeerDependencies: - '@types/node' @@ -20949,13 +20955,13 @@ snapshots: transitivePeerDependencies: - '@types/node' - '@graphiql/toolkit@0.9.1(@types/node@22.13.14)(graphql-ws@6.0.4(graphql@16.11.0)(ws@8.18.3))(graphql@16.11.0)': + '@graphiql/toolkit@0.9.1(@types/node@22.13.14)(graphql-ws@6.0.4(graphql@16.11.0)(ws@8.18.1))(graphql@16.11.0)': dependencies: '@n1ru4l/push-pull-async-iterable-iterator': 3.2.0 graphql: 16.11.0 meros: 1.3.0(@types/node@22.13.14) optionalDependencies: - graphql-ws: 6.0.4(graphql@16.11.0)(ws@8.18.3) + graphql-ws: 6.0.4(graphql@16.11.0)(ws@8.18.1) transitivePeerDependencies: - '@types/node' @@ -25661,7 +25667,7 @@ snapshots: - supports-color - webpack - '@sentry/nextjs@9.15.0(@opentelemetry/context-async-hooks@1.30.1(@opentelemetry/api@1.9.0))(@opentelemetry/core@1.30.1(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.57.2(@opentelemetry/api@1.9.0)(supports-color@8.1.1))(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(encoding@0.1.13)(next@15.3.3(@opentelemetry/api@1.9.0)(@playwright/test@1.53.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.77.4))(react@18.3.1)(supports-color@8.1.1)(webpack@5.94.0)': + '@sentry/nextjs@9.15.0(@opentelemetry/context-async-hooks@1.30.1(@opentelemetry/api@1.9.0))(@opentelemetry/core@1.30.1(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.57.2(@opentelemetry/api@1.9.0)(supports-color@8.1.1))(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(encoding@0.1.13)(next@15.3.3(@babel/core@7.26.10(supports-color@8.1.1))(@opentelemetry/api@1.9.0)(@playwright/test@1.53.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.77.4))(react@18.3.1)(supports-color@8.1.1)(webpack@5.94.0)': dependencies: '@opentelemetry/api': 1.9.0 '@opentelemetry/semantic-conventions': 1.32.0 @@ -31516,11 +31522,11 @@ snapshots: graphemer@1.4.0: {} - graphiql@4.0.2(@codemirror/language@6.11.0)(@emotion/is-prop-valid@1.2.1)(@types/node@22.13.14)(@types/react-dom@18.3.0)(@types/react@18.3.3)(graphql-ws@6.0.4(graphql@16.11.0)(ws@8.18.3))(graphql@16.11.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + graphiql@4.0.2(@codemirror/language@6.11.0)(@emotion/is-prop-valid@1.2.1)(@types/node@22.13.14)(@types/react-dom@18.3.0)(@types/react@18.3.3)(graphql-ws@6.0.4(graphql@16.11.0)(ws@8.18.1))(graphql@16.11.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - '@graphiql/plugin-doc-explorer': 0.0.1(@codemirror/language@6.11.0)(@emotion/is-prop-valid@1.2.1)(@types/node@22.13.14)(@types/react-dom@18.3.0)(@types/react@18.3.3)(graphql-ws@6.0.4(graphql@16.11.0)(ws@8.18.3))(graphql@16.11.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@graphiql/plugin-history': 0.0.2(@codemirror/language@6.11.0)(@emotion/is-prop-valid@1.2.1)(@types/node@22.13.14)(@types/react-dom@18.3.0)(@types/react@18.3.3)(graphql-ws@6.0.4(graphql@16.11.0)(ws@8.18.3))(graphql@16.11.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@graphiql/react': 0.32.0(@codemirror/language@6.11.0)(@emotion/is-prop-valid@1.2.1)(@types/node@22.13.14)(@types/react-dom@18.3.0)(@types/react@18.3.3)(graphql-ws@6.0.4(graphql@16.11.0)(ws@8.18.3))(graphql@16.11.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@graphiql/plugin-doc-explorer': 0.0.1(@codemirror/language@6.11.0)(@emotion/is-prop-valid@1.2.1)(@types/node@22.13.14)(@types/react-dom@18.3.0)(@types/react@18.3.3)(graphql-ws@6.0.4(graphql@16.11.0)(ws@8.18.1))(graphql@16.11.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@graphiql/plugin-history': 0.0.2(@codemirror/language@6.11.0)(@emotion/is-prop-valid@1.2.1)(@types/node@22.13.14)(@types/react-dom@18.3.0)(@types/react@18.3.3)(graphql-ws@6.0.4(graphql@16.11.0)(ws@8.18.1))(graphql@16.11.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@graphiql/react': 0.32.0(@codemirror/language@6.11.0)(@emotion/is-prop-valid@1.2.1)(@types/node@22.13.14)(@types/react-dom@18.3.0)(@types/react@18.3.3)(graphql-ws@6.0.4(graphql@16.11.0)(ws@8.18.1))(graphql@16.11.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) graphql: 16.11.0 react: 18.3.1 react-compiler-runtime: 19.1.0-rc.1(react@18.3.1) @@ -31607,6 +31613,13 @@ snapshots: dependencies: graphql: 16.11.0 + graphql-ws@6.0.4(graphql@16.11.0)(ws@8.18.1): + dependencies: + graphql: 16.11.0 + optionalDependencies: + ws: 8.18.1 + optional: true + graphql-ws@6.0.4(graphql@16.11.0)(ws@8.18.3): dependencies: graphql: 16.11.0 @@ -34915,7 +34928,7 @@ snapshots: number-flow@0.3.7: {} - nuqs@1.19.1(next@15.3.3(@opentelemetry/api@1.9.0)(@playwright/test@1.53.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.77.4)): + nuqs@1.19.1(next@15.3.3(@babel/core@7.26.10(supports-color@8.1.1))(@opentelemetry/api@1.9.0)(@playwright/test@1.53.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.77.4)): dependencies: mitt: 3.0.1 next: 15.3.3(@babel/core@7.26.10(supports-color@8.1.1))(@opentelemetry/api@1.9.0)(@playwright/test@1.53.0)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.77.4) @@ -36831,6 +36844,15 @@ snapshots: remove-trailing-spaces@1.0.9: {} + remove-types@1.0.0(supports-color@8.1.1): + dependencies: + '@babel/core': 7.26.10(supports-color@8.1.1) + '@babel/plugin-syntax-decorators': 7.25.9(@babel/core@7.26.10(supports-color@8.1.1)) + '@babel/plugin-transform-typescript': 7.27.0(@babel/core@7.26.10(supports-color@8.1.1))(supports-color@8.1.1) + prettier: 2.8.8 + transitivePeerDependencies: + - supports-color + rename-keys@1.2.0: {} repeat-element@1.1.4: {} From f6a5ddf2f9a9546ef0f3a637899e8ba7b7c4d8ec Mon Sep 17 00:00:00 2001 From: Chris Stockton <180184+cstockton@users.noreply.github.com> Date: Wed, 6 Aug 2025 09:10:23 -0700 Subject: [PATCH 9/9] feat: update the main platform SSO documentation (#37705) * feat: update the main platform SSO documentation Update the main platform SSO documentation in preparation for the Self-Service SSO release (https://github.com/supabase/supabase/pull/36732) --------- Co-authored-by: Chris Stockton Co-authored-by: Charis <26616127+charislam@users.noreply.github.com> --- apps/docs/content/guides/platform/sso.mdx | 33 +++++-- .../content/guides/platform/sso/azure.mdx | 75 +++++++++++--- .../content/guides/platform/sso/gsuite.mdx | 93 ++++++++++++++---- .../docs/content/guides/platform/sso/okta.mdx | 81 ++++++++++++--- ...o-dashboard-configure-attributes-azure.png | Bin 0 -> 47916 bytes ...dashboard-configure-attributes-generic.png | Bin 0 -> 38729 bytes .../sso-dashboard-configure-attributes.png | Bin 0 -> 34982 bytes ...-dashboard-configure-autojoin-disabled.png | Bin 0 -> 12035 bytes ...hboard-configure-autojoin-enabled-role.png | Bin 0 -> 30153 bytes ...o-dashboard-configure-autojoin-enabled.png | Bin 0 -> 20819 bytes .../sso-dashboard-configure-domain-multi.png | Bin 0 -> 13934 bytes .../img/sso-dashboard-configure-domain.png | Bin 0 -> 10060 bytes ...sso-dashboard-configure-metadata-azure.png | Bin 0 -> 14162 bytes ...so-dashboard-configure-metadata-gsuite.png | Bin 0 -> 13493 bytes .../sso-dashboard-configure-metadata-okta.png | Bin 0 -> 14532 bytes .../public/img/sso-dashboard-disabled.png | Bin 0 -> 27430 bytes .../docs/public/img/sso-dashboard-enabled.png | Bin 0 -> 98122 bytes 17 files changed, 228 insertions(+), 54 deletions(-) create mode 100644 apps/docs/public/img/sso-dashboard-configure-attributes-azure.png create mode 100644 apps/docs/public/img/sso-dashboard-configure-attributes-generic.png create mode 100644 apps/docs/public/img/sso-dashboard-configure-attributes.png create mode 100644 apps/docs/public/img/sso-dashboard-configure-autojoin-disabled.png create mode 100644 apps/docs/public/img/sso-dashboard-configure-autojoin-enabled-role.png create mode 100644 apps/docs/public/img/sso-dashboard-configure-autojoin-enabled.png create mode 100644 apps/docs/public/img/sso-dashboard-configure-domain-multi.png create mode 100644 apps/docs/public/img/sso-dashboard-configure-domain.png create mode 100644 apps/docs/public/img/sso-dashboard-configure-metadata-azure.png create mode 100644 apps/docs/public/img/sso-dashboard-configure-metadata-gsuite.png create mode 100644 apps/docs/public/img/sso-dashboard-configure-metadata-okta.png create mode 100644 apps/docs/public/img/sso-dashboard-disabled.png create mode 100644 apps/docs/public/img/sso-dashboard-enabled.png diff --git a/apps/docs/content/guides/platform/sso.mdx b/apps/docs/content/guides/platform/sso.mdx index a4df878167814..6553a1f39f2ff 100644 --- a/apps/docs/content/guides/platform/sso.mdx +++ b/apps/docs/content/guides/platform/sso.mdx @@ -13,11 +13,11 @@ Supabase offers single sign-on (SSO) as a login option to provide additional acc -Supabase currently provides SAML SSO for [Team and Enterprise Plan customers](https://supabase.com/pricing). If you are an existing Team or Enterprise Plan customer, continue with the setup below. Once completed, [contact us](https://supabase.com/dashboard/support/new?category=Login_issues&subject=Enquiry%20about%20setting%20up%20SSO&message=I%20would%20like%20to%20set%20up%20SAML%20SSO%20for%20my%20team%20and%20have%20followed%20https://supabase.com/docs/guides/platform/sso%20and%20configured%20my%20provider%20%0A%0APlease%20attach%20the%20IDP%20metadata%20in%20the%20attachments%20below) to enable SSO for your team. +Supabase currently provides SAML SSO for [Team and Enterprise Plan customers](https://supabase.com/pricing). If you are an existing Team or Enterprise Plan customer, continue with the setup below. -## Setup and limitations +## Supported providers Supabase supports practically all identity providers that support the SAML 2.0 SSO protocol. We've prepared these guides for commonly used identity providers to help you get started. If you use a different provider, our support stands ready to support you. @@ -25,18 +25,33 @@ Supabase supports practically all identity providers that support the SAML 2.0 S - [Azure Active Directory](/docs/guides/platform/sso/azure) - [Okta](/docs/guides/platform/sso/okta) -Accounts signing in with SSO have certain limitations. -The following sections outline the limitations when SSO is enabled or disabled for your team. +Once configured, you can update your settings anytime via the [SSO tab](https://supabase.com/dashboard/org/_/sso) under **Organization Settings**. -### Enable SSO for your team [#enable-sso] +![SSO Example](/docs/img/sso-dashboard-enabled.png) + +## Key configuration options + +- **Multiple domains** - You can associate one or more email domains with your SSO provider. Users with email addresses matching these domains are eligible to sign in via SSO. +- **Auto-join** - Optionally allow users with a matching domain to be added to your organization automatically when they first sign in, without an invitation. +- **Default role for auto-joined users** - Choose the role (e.g., `Read-only`, `Developer`, `Administrator`, `Owner`) that automatically joined users receive. Refer to [access control](/docs/guides/platform/access-control) for more information about roles. + +## How SSO works in Supabase + +When SSO is enabled for an organization: - Organization invites are restricted to company members belonging to the same identity provider. - Every user has an organization created by default. They can create as many projects as they want. - An SSO user will not be able to update or reset their password since the company administrator manages their access via the identity provider. - If an SSO user with the following email of `alice@foocorp.com` attempts to sign in with a GitHub account that uses the same email, a separate Supabase account is created and will not be linked to the SSO user's account. -- An SSO user will not be able to see all organizations/projects created under the same identity provider. They will need to be invited to the Supabase organization first. Refer to [access control](/docs/guides/platform/access-control) for more information. +- SSO users will only see organizations/projects they've been invited to or auto-joined into. See [access control](/docs/guides/platform/access-control) for more details. + +## Disabling SSO for an organization + +If you disable the SSO provider for an organization, **all SSO users will immediately be unable to sign in**. Before disabling SSO, ensure you have at least one non-SSO owner account to prevent being locked out. + +## Removing an individual SSO user's access -### Disable SSO for your team [#disable-sso] +To revoke access for a specific SSO user without disabling the provider entirely you may: -- You can prevent a user's account from further access to Supabase by removing or disabling their account in your identity provider. -- You should also remove or downgrade their permissions from any organizations inside Supabase. +- Remove or disable the user's account in your identity provider +- Downgrade or remove their permissions for any organizations in Supabase. diff --git a/apps/docs/content/guides/platform/sso/azure.mdx b/apps/docs/content/guides/platform/sso/azure.mdx index 3f3e93888ecc3..1ced76f50ddd4 100644 --- a/apps/docs/content/guides/platform/sso/azure.mdx +++ b/apps/docs/content/guides/platform/sso/azure.mdx @@ -5,7 +5,7 @@ description: 'Configure single sign-on with Azure AD (Microsoft Entra).' -This feature is only available on the [Team and Enterprise Plans](https://supabase.com/pricing). If you are an existing Team or Enterprise Plan customer, continue with the setup below. Once completed, [contact us](https://supabase.com/dashboard/support/new?category=Login_issues&subject=Enquiry%20about%20setting%20up%20SSO&message=I%20would%20like%20to%20set%20up%20SAML%20SSO%20for%20my%20team%20and%20have%20followed%20https://supabase.com/docs/guides/platform/sso%20and%20configured%20my%20provider%20%0A%0APlease%20attach%20the%20IDP%20metadata%20in%20the%20attachments%20below) to enable SSO for your team. +This feature is only available on the [Team and Enterprise Plans](https://supabase.com/pricing). If you are an existing Team or Enterprise Plan customer, continue with the setup below. @@ -33,7 +33,7 @@ You'll be using the custom enterprise application setup for Supabase. ## Step 3: Fill in application details [#add-application-details] -In the modal titled _Create your own application_, enter a display name for Supabase. This is the name your Azure AD users see when signing in to Supabase from Azure. `Supabase` works in most cases. +In the modal titled _Create your own application_, enter a display name for Supabase. This is the name your Azure AD users will see when signing in to Supabase from Azure. `Supabase` works in most cases. Make sure to choose the third option: _Integrate any other application you don't find in the gallery (Non-gallery)_. @@ -81,24 +81,73 @@ All of the correct information should automatically populate the _Basic SAML Con Finally, click the _Save_ button to save the configuration. -## Step 7: Obtain metadata URL and send to Supabase [#send-metadata-url] +## Step 7: Obtain metadata URL [#idp-metadata-url] -Supabase needs to finalize enabling single sign-on with your Azure AD application. To do this, copy and send the link under **App Federation Metadata URL** in \*section 3 **SAML Certificates\*** to your support contact and await further instructions. If you're not clear who to send this link to or need further assistance, reach out to [Supabase Support](https://supabase.help). - -**Do not test the login until you have heard back from the support contact.** +Save the link under **App Federation Metadata URL** in \*section 3 **SAML Certificates\***. You will need to enter this URL later in [Step 10](#dashboard-configure-metadata). ![Azure AD console: Supabase application, SAML Certificates card shown, App Federation Metadata Url highlighted](/docs/img/sso-azure-step-07.png) -## Step 8: Wait for confirmation [#confirmation] +## Step 8: Enable SSO in the Dashboard [#dashboard-enable-sso] + +1. Visit the [SSO tab](https://supabase.com/dashboard/org/_/sso) under the Organization Settings page. ![SSO disabled](/docs/img/sso-dashboard-disabled.png) + +2. Toggle **Enable Single Sign-On** to begin configuration. Once enabled, the configuration form appears. ![SSO enabled](/docs/img/sso-dashboard-enabled.png) + +## Step 9: Configure domains [#dashboard-configure-domain] + +Enter one or more domains associated with your users email addresses (e.g., `supabase.com`). +These domains determine which users are eligible to sign in via SSO. + +![Domain configuration](/docs/img/sso-dashboard-configure-domain.png) + +If your organization uses more than one email domain - for example, `supabase.com` for staff and `supabase.io` for contractors - you can add multiple domains here. All listed domains will be authorized for SSO sign-in. + +![Domain configuration with multiple domains](/docs/img/sso-dashboard-configure-domain-multi.png) + + + +We do not permit use of public domains like `gmail.com`, `yahoo.com`. + + + +## Step 10: Configure metadata [#dashboard-configure-metadata] + +Enter the metadata URL you obtained from [Step 7](#idp-metadata-url) into the Metadata URL field: -Wait for confirmation or further instructions from your support contact at Supabase before proceeding to the next step. It usually takes us 1 business day to configure SSO for you. +![Metadata configuration with Azure AD](/docs/img/sso-dashboard-configure-metadata-azure.png) -## Step 9: Test single sign-on [#testing] +## Step 11: Configure attribute mapping [#dashboard-configure-attributes] + +Fill out the Attribute Mapping section using the **Azure** preset. + +![Attribute mapping configuration](/docs/img/sso-dashboard-configure-attributes-azure.png) + +## Step 12: Join organization on signup (optional) [#dashboard-configure-autojoin] + +By default this setting is disabled, users logging in via SSO will not be added to your organization automatically. + +![Auto-join disabled](/docs/img/sso-dashboard-configure-autojoin-disabled.png) + +Toggle this on if you want SSO-authenticated users to be **automatically added to your organization** when they log in via SSO. + +![Auto-join enable](/docs/img/sso-dashboard-configure-autojoin-enabled.png) + +When auto-join is enabled, you can choose the **default role** for new users: + +![Auto-join role selection](/docs/img/sso-dashboard-configure-autojoin-enabled-role.png) + +Choose a role that fits the level of access you want to grant to new members. + + + +Visit [access-control](/docs/guides/platform/access-control) documentation for details about each role. + + -_Testing sign-on before your Azure AD has been registered with Supabase will not work. Make sure you've received confirmation from your support contact at Supabase as laid out in the [confirmation](#confirmation) step._ +## Step 13: Save changes and test single sign-on [#dashboard-configure-save] -Once you’ve received confirmation from your support contact at Supabase that SSO setup has been completed for your enterprise, you can ask some of your users to sign in via their Azure AD account. +When you click **Save changes**, your new SSO configuration is applied immediately. From that moment, any user with an email address matching one of your configured domains who visits your organization's sign-in URL will be routed through the SSO flow. -You ask them to enter their email address on the [Sign in with SSO](https://supabase.com/dashboard/sign-in-sso) page. +We recommend asking a few users to test signing in via their Azure AD account. They can do this by entering their email address on the [Sign in with SSO](https://supabase.com/dashboard/sign-in-sso) page. -If sign in is not working correctly, reach out to your support contact at Supabase for further guidance. +If SSO sign-in doesn't work as expected, contact your Supabase support representative for assistance. diff --git a/apps/docs/content/guides/platform/sso/gsuite.mdx b/apps/docs/content/guides/platform/sso/gsuite.mdx index 2eed8215f20a3..cfa2960348597 100644 --- a/apps/docs/content/guides/platform/sso/gsuite.mdx +++ b/apps/docs/content/guides/platform/sso/gsuite.mdx @@ -5,7 +5,7 @@ description: 'Configure single sign-on with Google Workspace (G Suite).' -This feature is only available on the [Team and Enterprise Plans](https://supabase.com/pricing). If you are an existing Team or Enterprise Plan customer, continue with the setup below. Once completed, [contact us](https://supabase.com/dashboard/support/new?category=Login_issues&subject=Enquiry%20about%20setting%20up%20SSO&message=I%20would%20like%20to%20set%20up%20SAML%20SSO%20for%20my%20team%20and%20have%20followed%20https://supabase.com/docs/guides/platform/sso%20and%20configured%20my%20provider%20%0A%0APlease%20attach%20the%20IDP%20metadata%20in%20the%20attachments%20below) to enable SSO for your team. +This feature is only available on the [Team and Enterprise Plans](https://supabase.com/pricing). If you are an existing Team or Enterprise Plan customer, continue with the setup below. @@ -35,12 +35,10 @@ The information you enter here is for visibility into your Google Workspace. You ## Step 4: Download IdP metadata [#download-idp-metadata] -This is a very important step. Click on _DOWNLOAD METADATA_ and save the file that was downloaded. +This is a very important step. Click on _DOWNLOAD METADATA_ and save the file that was downloaded. You will need to upload this file later in [Step 10](#dashboard-configure-metadata). ![Google Workspace: Web and mobile apps admin console, Add custom SAML, Google Identity Provider details screen](/docs/img/sso-gsuite-step-04.png) -It's very important to send this file to your support contact at Supabase to complete the SSO setup process. If you're not sure where to send this file, you can always reach out to [Supabase Support](https://supabase.help). - **Important: Make sure the certificate as shown on screen has at least 1 year before it expires. Mark down this date in your calendar so you will be reminded that you need to update the certificate without any downtime for your users.** ## Step 5: Add service provider details [#add-service-provider-details] @@ -63,34 +61,91 @@ Attribute mappings allow Supabase to get information about your Google Workspace **A _Primary email_ to `email` mapping is required.** Other mappings shown below are optional and configurable depending on your Google Workspace setup. If in doubt, replicate the same config as shown. -Share any changes, if any, from this screen with your Supabase support contact. +Any changes you make from this screen will be used later in [Step 10: Configure Attribute Mapping](#dashboard-configure-attributes). ![Google Workspace: Web and mobile apps admin console, Add custom SAML, Attribute mapping](/docs/img/sso-gsuite-step-06.png) -## Step 7: Wait for confirmation [#confirmation] +## Step 7: Configure user access [#configure-user-access] -Once you’ve configured the Google Workspace app as shown above, make sure you send the [metadata file you downloaded](#download-idp-metadata) and information regarding the [attribute mapping](#configure-attribute-mappings) (if any changes are applicable) to your support contact at Supabase. +You can configure which Google Workspace user accounts will get access to Supabase. This is important if you wish to limit access to your software engineering teams. -This information needs to be entered into Supabase before SSO is activated end-to-end. +You can configure this access by clicking on the _User access_ card (or down-arrow). Follow the instructions on screen. -Wait for confirmation that this information has successfully been added to Supabase. It usually takes us 1 business day to configure this information for you. +![Google Workspace: Web and mobile apps admin console, Supabase app screen](/docs/img/sso-gsuite-step-08.png) -## Step 8: Configure user access [#configure-user-access] + -You can configure which Google Workspace user accounts will get access to Supabase. This is important if you wish to limit access to your software engineering teams. +Changes from this step sometimes take a while to propagate across Google's systems. Wait at least 15 minutes before testing your changes. -You can configure this access by clicking on the _User access_ card (or down-arrow). Follow the instructions on screen. + -Changes from this step sometimes take a while to propagate across Google’s systems. Wait at least 15 minutes before proceeding to the next step. +## Step 8: Enable SSO in the Dashboard [#dashboard-enable-sso] -![Google Workspace: Web and mobile apps admin console, Supabase app screen](/docs/img/sso-gsuite-step-08.png) +1. Visit the [SSO tab](https://supabase.com/dashboard/org/_/sso) under the Organization Settings page. ![SSO disabled](/docs/img/sso-dashboard-disabled.png) + +2. Toggle **Enable Single Sign-On** to begin configuration. Once enabled, the configuration form appears. ![SSO enabled](/docs/img/sso-dashboard-enabled.png) + +## Step 9: Configure domains [#dashboard-configure-domain] + +Enter one or more domains associated with your users email addresses (e.g., `supabase.com`). +These domains determine which users are eligible to sign in via SSO. + +![Domain configuration](/docs/img/sso-dashboard-configure-domain.png) + +If your organization uses more than one email domain - for example, `supabase.com` for staff and `supabase.io` for contractors - you can add multiple domains here. All listed domains will be authorized for SSO sign-in. + +![Domain configuration with multiple domains](/docs/img/sso-dashboard-configure-domain-multi.png) + + + +We do not permit use of public domains like `gmail.com`, `yahoo.com`. + + + +## Step 10: Configure metadata [#dashboard-configure-metadata] + +Upload the metadata file you downloaded in [Step 6](#download-idp-metadata) into the Metadata Upload File field. -## Step 9: Test single sign-on [#testing] +![Metadata configuration with Google Workspace](/docs/img/sso-dashboard-configure-metadata-gsuite.png) + +## Step 11: Configure attribute mapping [#dashboard-configure-attributes] + +Enter the SAML attributes you filled out in [Step 6](#configure-attribute-mapping) into the Attribute Mapping section. + +![Attribute mapping configuration](/docs/img/sso-dashboard-configure-attributes-generic.png) + + + +If you did not customize your settings you may save some time by clicking the **G Suite** preset. + + + +## Step 12: Join organization on signup (optional) [#dashboard-configure-autojoin] + +By default this setting is disabled, users logging in via SSO will not be added to your organization automatically. + +![Auto-join disabled](/docs/img/sso-dashboard-configure-autojoin-disabled.png) + +Toggle this on if you want SSO-authenticated users to be **automatically added to your organization** when they log in via SSO. + +![Auto-join enable](/docs/img/sso-dashboard-configure-autojoin-enabled.png) + +When auto-join is enabled, you can choose the **default role** for new users: + +![Auto-join role selection](/docs/img/sso-dashboard-configure-autojoin-enabled-role.png) + +Choose a role that fits the level of access you want to grant to new members. + + + +Visit [access-control](/docs/guides/platform/access-control) documentation for details about each role. + + -Once you’ve turned on access to Supabase for users in your organization, ask one of those users to help you out in testing the setup. +## Step 13: Save changes and test single sign-on [#dashboard-configure-save] -It often helps to ask them to log out of their Google account and log back in. +When you click **Save changes**, your new SSO configuration is applied immediately. From that moment, any user with an email address matching one of your configured domains who visits your organization's sign-in URL will be routed through the SSO flow. -Ask them to enter their email address in the [Sign in with SSO](https://supabase.com/dashboard/sign-in-sso) page. +We recommend asking a few users to test signing in via their Google Workspace account. They can do this by entering their email address on the [Sign in with SSO](https://supabase.com/dashboard/sign-in-sso) page. -If sign in is not working correctly, reach out to your support contact at Supabase. +If SSO sign-in doesn't work as expected, contact your Supabase support representative for assistance. diff --git a/apps/docs/content/guides/platform/sso/okta.mdx b/apps/docs/content/guides/platform/sso/okta.mdx index d86e95d6711bd..22bf180e98785 100644 --- a/apps/docs/content/guides/platform/sso/okta.mdx +++ b/apps/docs/content/guides/platform/sso/okta.mdx @@ -5,7 +5,7 @@ description: 'Configure single sign-on with Okta.' -This feature is only available on the [Team and Enterprise Plans](https://supabase.com/pricing). If you are an existing Team or Enterprise Plan customer, continue with the setup below. Once completed, [contact us](https://supabase.com/dashboard/support/new?category=Login_issues&subject=Enquiry%20about%20setting%20up%20SSO&message=I%20would%20like%20to%20set%20up%20SAML%20SSO%20for%20my%20team%20and%20have%20followed%20https://supabase.com/docs/guides/platform/sso%20and%20configured%20my%20provider%20%0A%0APlease%20attach%20the%20IDP%20metadata%20in%20the%20attachments%20below) to enable SSO for your team. +This feature is only available on the [Team and Enterprise Plans](https://supabase.com/pricing). If you are an existing Team or Enterprise Plan customer, continue with the setup below. @@ -37,7 +37,7 @@ The information you enter here is for visibility into your Okta applications men ## Step 4: Fill out SAML settings [#add-saml-settings] -These settings let Supabase use SAML 2.0 properly with your Okta application. Make sure you enter this information exactly as shown on in this table and screenshot. +These settings let Supabase use SAML 2.0 properly with your Okta application. Make sure you enter this information exactly as shown on in this table. | Setting | Value | | ---------------------------------------------- | --------------------------------------------------- | @@ -55,9 +55,7 @@ These settings let Supabase use SAML 2.0 properly with your Okta application. Ma Attribute Statements allow Supabase to get information about your Okta users on each login. -**A `email` to `user.email` statement is required.** Other mappings shown below are optional and configurable depending on your Okta setup. If in doubt, replicate the same config as shown. - -Share any changes, if any, from this screen with your Supabase support contact. +**A `email` to `user.email` statement is required.** Other mappings shown below are optional and configurable depending on your Okta setup. If in doubt, replicate the same config as shown. You will use this mapping later in [Step 10](#dashboard-configure-attributes). ![Okta dashboard: Attribute Statements configuration screen](/docs/img/sso-okta-step-05.png) @@ -67,22 +65,79 @@ Supabase needs to finalize enabling single sign-on with your Okta application. To do this scroll down to the _SAML Signing Certificates_ section on the _Sign On_ tab of the _Supabase_ application. Pick the the _SHA-2_ row with an _Active_ status. Click on the _Actions_ dropdown button and then on the _View IdP Metadata_. -This will open up the SAML 2.0 Metadata XML file in a new tab in your browser. Copy this URL and send it to your support contact and await further instructions. If you're not clear who to send this link to or need further assistance, contact [Supabase Support](https://supabase.help). +This will open up the SAML 2.0 Metadata XML file in a new tab in your browser. You will need to enter this URL later in [Step 9](#dashboard-configure-metadata). The link usually has this structure: `https://.okta.com/apps//sso/saml/metadata` ![Okta dashboard: SAML Signing Certificates, Actions button highlighted](/docs/img/sso-okta-step-06.png) -## Step 7: Wait for confirmation [#confirmation] +## Step 7: Enable SSO in the Dashboard [#dashboard-enable-sso] + +1. Visit the [SSO tab](https://supabase.com/dashboard/org/_/sso) under the Organization Settings page. ![SSO disabled](/docs/img/sso-dashboard-disabled.png) + +2. Toggle **Enable Single Sign-On** to begin configuration. Once enabled, the configuration form appears. ![SSO enabled](/docs/img/sso-dashboard-enabled.png) + +## Step 8: Configure domains [#dashboard-configure-domain] + +Enter one or more domains associated with your users email addresses (e.g., `supabase.com`). +These domains determine which users are eligible to sign in via SSO. + +![Domain configuration](/docs/img/sso-dashboard-configure-domain.png) + +If your organization uses more than one email domain - for example, `supabase.com` for staff and `supabase.io` for contractors - you can add multiple domains here. All listed domains will be authorized for SSO sign-in. + +![Domain configuration with multiple domains](/docs/img/sso-dashboard-configure-domain-multi.png) + + + +We do not permit use of public domains like `gmail.com`, `yahoo.com`. + + + +## Step 9: Configure metadata [#dashboard-configure-metadata] + +Enter the metadata URL you obtained from [Step 6](#idp-metadata-url) into the Metadata URL field: + +![Metadata configuration with Okta](/docs/img/sso-dashboard-configure-metadata-okta.png) + +## Step 10: Configure attribute mapping [#dashboard-configure-attributes] + +Enter the SAML attributes you filled out in [Step 5](#add-attribute-statements) into the Attribute Mapping section. -Once you’ve configured the Okta app as shown above, make sure you send the [metadata URL](#idp-metadata-url) and information regarding the [attribute statements](#add-attribute-statements) (if any changes are applicable) to your support contact at Supabase. +![Attribute mapping configuration](/docs/img/sso-dashboard-configure-attributes.png) -Wait for confirmation that this information has successfully been added to Supabase. It usually takes us 1 business day to configure this information for you. + + +If you did not customize your settings you may save some time by clicking the **Okta** preset. + + + +## Step 11: Join organization on signup (optional) [#dashboard-configure-autojoin] + +By default this setting is disabled, users logging in via SSO will not be added to your organization automatically. + +![Auto-join disabled](/docs/img/sso-dashboard-configure-autojoin-disabled.png) + +Toggle this on if you want SSO-authenticated users to be **automatically added to your organization** when they log in via SSO. + +![Auto-join enable](/docs/img/sso-dashboard-configure-autojoin-enabled.png) + +When auto-join is enabled, you can choose the **default role** for new users: + +![Auto-join role selection](/docs/img/sso-dashboard-configure-autojoin-enabled-role.png) + +Choose a role that fits the level of access you want to grant to new members. + + + +Visit [access-control](/docs/guides/platform/access-control) documentation for details about each role. + + -## Step 8: Test single sign-on [#testing] +## Step 12: Save changes and test single sign-on [#dashboard-configure-save] -Once you’ve received confirmation from your support contact at Supabase that SSO setup has been completed for your enterprise, you can ask some of your users to sign in via their Okta account. +When you click **Save changes**, your new SSO configuration is applied immediately. From that moment, any user with an email address matching one of your configured domains who visits your organization's sign-in URL will be routed through the SSO flow. -You ask them to enter their email address on the [Sign in with SSO](https://supabase.com/dashboard/sign-in-sso) page. +We recommend asking a few users to test signing in via their Okta account. They can do this by entering their email address on the [Sign in with SSO](https://supabase.com/dashboard/sign-in-sso) page. -If sign in is not working correctly, reach out to your support contact at Supabase for further guidance. +If SSO sign-in doesn't work as expected, contact your Supabase support representative for assistance. diff --git a/apps/docs/public/img/sso-dashboard-configure-attributes-azure.png b/apps/docs/public/img/sso-dashboard-configure-attributes-azure.png new file mode 100644 index 0000000000000000000000000000000000000000..09fa6ebb70eef5beee77daaae6f0c4c516c5b37a GIT binary patch literal 47916 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 literal 0 HcmV?d00001 diff --git a/apps/docs/public/img/sso-dashboard-configure-attributes-generic.png b/apps/docs/public/img/sso-dashboard-configure-attributes-generic.png new file mode 100644 index 0000000000000000000000000000000000000000..761a6ecc427243fa1c1ac571773563fbaaa02ec4 GIT binary patch literal 38729 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 SkMK75PgeS>RMt5?@Bant6w8JH literal 0 HcmV?d00001 diff --git a/apps/docs/public/img/sso-dashboard-configure-attributes.png b/apps/docs/public/img/sso-dashboard-configure-attributes.png new file mode 100644 index 0000000000000000000000000000000000000000..d7b2749cc389d3c3fb30683bbf054227258ae1cc GIT binary patch literal 34982 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 y;AAW*?NTGv?^$c=v0cMrt zAt>Xj7MU&xfC8hgd3*<@4v9B0&4KSwZoDtF=!~W;16#N0E|8KQxceWH`{%+JfPk)^ z@6f3RJ`M~e+eZFQuhA++gVpd>(+?`Xo>WZ#&xgUsmE)!`78|VlhLS_|jeyn9G zh6MJO;jukR|GZEJ3<$36!$Eqxzd@B7;^j3!x}{nkq`FQGzBB|1Xs=4D{2Cc^8a#n6 z%RGpww_$fF0%@@Z=XeZM9$1|qB-}>m==3ZA8l;Y0hWEzUM91Q9KQWN9G(yHagI$QO zLQSu%ds_vXP`7c}T&qkOG3v}%BkF+a*U@eiD4TMVD&W2E*%-yo<+ku*0KwJ|;}C2C zagP*q6|Gl$e~bTLMcGu89NZz)+6CN2W!JQ=D9Ks>Q7XgI8fuHzmLRw`++Rtc+;5bb zQ*+?B1__F}15V=|92ExyDHV)YOMo#>be8NQbL|81`^Ro7UX$T|MoZ|OAQ2_kiWTOE z2>w1d~o>y>6y!~ea1LUs-G#>7?mM9gP(_S0Mx9QC?CVj zS}7*vZ6N6@{yaZ+32r+;&+S!>4e)VOP~-1!9F;~h&0j3O@5wyZ?%fW-zTd!TZtK1ha^2J`H2U^^STCWiW5B*4b)eMB)k{?zb`go*?I zNfi^kZnmIM6dpFSxV3*0OTylzSZ!sxIpS-X2ny245Ja>eB>mNq0Ml9mP3yL6y_$br z>i=2s_uuwW#G=T?Kr225eiD||$le23rq-0nXSQgh+b_gJV1pudFGo)S_=;pp)?1{X z=+U+6{Jz)M!D>~$(F1~ibhRt;trat92e}4u?k<$RYepq*KsE+U-hgU)qK9n>zGDJJuXm6(cb21MxZEYE!*7p{2Bs=)c; zUAgN#(QxYVJuQo%+3|)7EksvJm|0b^^TX91%JtbPww-KHiZo{qT%@09X@-V*Q!9u8FNVB7?%k+gaQCVJ_@*oBbL`E9pmGnk?&Eu)(`KQTn9k74Ia<25@iS5_lph7R zH6MmgfIPZ&!M5|ck)AFz@u4951SlP*y&uiI)o=3u1R8?_l0Wcv9U|EayrtMtENsPr z+9Jj8SfcKLyVMcn-Pgi+63lVLXim)JwS5Jj3?d}%Eh}MG{R!IL-N4Ej&mHI1M4{~U zToN?i7*!*$MMt1k!<~Q|HXM3&ce?Bs3IT7)#`<13mGviC$bUa{D{`Eb&Qz$uIV(c- z^^{&dza)|S2=#}`o4=eJU-rt0+&MiS2|y)v$emM1VpoFS@Qv4VRr(EKgJmMxBs^MA zcuAij896u){vhThc5P9iNAlI8%6Zb+hI{4Seac-2snPo=yf6sDx`(eQo~?ZHo~6 za|jWK)brU|#uVe&!`9Kl6rho91rADSH&_xPw7E$s+f8Nt#C#JAV(CoE!&)Dwk4Sc&9 zkXg}>dsC9ZMzTAV4~!?@-*Z+>W!G6srH9YdqAd1fR#BKAz0Y)!CgFOPE_jxFW}@#j z7GaEk%#g?CYr$eweLJ>J-Yoq~d*HXN9fkz-o+aI9#R4ED45L)A>6l7EvKGAH^YmHCUjEFkv6jSY$UF`Y*pyAzwDeXBUK8SVwwY38j9=!O*_#FGjUiCaG-c@z z*Em5kHPn1_)vn>2C`u9X@ayjDy-N|N&p#~r;K55fzd^~BBTq;_CdEM_RuuUow#+$| zwEx^sgW&3<5!j@IeSbs%E^$0yHu%l!Be!V0XzPM8DQ)>|=!m(5DiP|is z#I6urGm_G<=XpIU%^I`6348>{cDR7X$d;jtP0mh#`ZW`ytlMCf*EA!;BWE8(k&Kj` zioQU{&~M6*e|Ff8G1B_lI|VIkRh6S7nx-+5MbXS$N_CIV4AH<&mHNAr9yOTB9Y2o-j5oy5-8o@1N5IDfrD z3jmlbMx)rtM~N6gmLhq%>~qoiif9#B#gfc<05e9M~0 z+kT(09rk65%a0yZs3Fu-}m$GogvmYr;-aTIug9Mz&z!r!QIr{35A-nm|o z7VN-_)o$ErDD?eqtp&q{=}d#ns1X*sK8H>YTsvEFUnYgI1TF3|$0yDg6Ux>d%&kC{ z-rx=n@^98ieLG@`n(seOS>At5hpw0Fvu&u8z@&rQ&g!$)y(&rLe4)D*Dji09PChZb zP_4ILr<$Zz`Z!~qK&^hokbg~YW8wXGBB8yC2VR}tpa)_L3U)Eb|8VBJk!n^s2e*&M*W%$u^&P8Oisz)xuYC}Zh>kl$u61B$Cab%lCPT6tZ1~{;m?egM4CHUx# zTmCRAp`dT*?(&ms@&Gwn?YuW6l>2UiD4~wyl|AfYw@K+;@3QWow~X+SP_*0AQm6IB zEkWkwz9$joOeFcvq4_det%A5!-|zO$u++oi-)ULgSwa%JW+l4CS;=KGDoWZx>RSA5 zE@q4gpAShGt7jBy7gUuE@*Y@&|J5yaS%&>i1~s%WmO<5xOnM=1)fSEZ^!-A@3 zM-wG1DYeaC@db37CQhF4aFwM=>3y1Z6dsS%Qh8wK0W zN-2o<3F)Q$je&;YcaaJSvt)3d(eRSL^bPlw$iCyq=67#QHHhdOD1TID;@Ge^{b$3c zMzDT@cW=|?>)!m8m<;5P#rvh}H(9RDd=!#i$n2gD73FVEWwcMBuX?YH{}KD*PmaLq zqUWfj6R6DXC&nh_qW0bifi0O&0^x3k0ItjYyjlf#*=q~y~nTsFpInkOdV{q0MZCTj~HA1^x@OK_=!w^%BCfsA-%6c3j@$8uG! zU3cvHzX0D8;m)cGZ4!gOku$QR;sBju0#pC}#JWqM+Wh_MU9Hi7xVDWM^mI2y*maHo zvX|!hE07tMEEFzDiR)%Cn!fn!GHnE2$eIn`fv10#-(%&6{ZkfwiZ(t0%Ts@`5@HVI zSHT-#3;+vD<2VubSIA`+W&(xi=d`Z_l{ddC=?dw)Lh{t!mw?GqQKa8?VFec7)9;~jv}o1Nf(~va(Z3+?z$zZ{@Dqk-HK4qHqV5WM@g4Q!?HTGi z>T*3=CwDk-JdCvZdr4xU!)wIm<*gltFwJ*p*Ovrm8{A?S9W%;L|Gy01gV{nfEa$pi zZ%6)SZNwbFg+P7uc^CU%141nBX{y+nzSxziMJv$D@jDEyuY)>5WJf6CTM9_h4(+;W zq`Vp|(K`J!KKrgxp8sDFz&vnU|0rw--tampErtJEnPN!DN9p8;Vr3#*x9LIsLpRUOT zT~Z@w^&a&4s2^=h_;AN1>~loZj3$s}K*P%K|Ku}sk*nOW@uXE2OSAo_gm`%-w@rFC zK85g_MAyftSCL6;ZI|BQ!T~ zVGvC`YCB>#qlw~9FQ~}9!B#cwQJ!GzVE>4^27RyC^n@4?C^|WVC1*95r$(Hq z06M`NfMkI(fN6(7luW#R=bpFi?x0EY{suh2v@_>z8??kv5&)BRdrtwf=viCxgTDw! zaDD`GH}B}phKbD9mEuOakWYsrXjG1}vjYEoceAr^2sx+Q7IPR{s3%tJw@v9#7UKur%GB*_a}C$7LU_;7J|O zni+n4e*M|1>OM0r&=`gvnC=6$=DzvN z&i7L8*!F*&5L57JBV0!U&dm7SW8TE@X}$3;3M$|qU!5vx zOqye9MVFCQ&r1p=xk)WWzYVhPpiT^KBIl%MOiYw#G;4O@3jz@Th1w#M)D9_Bl~#^i za6w&v5}D00XZS0=K^Ku5hdpQP+Z8)FsNnqcgIwmhQh-cK@&RRfTYkRF5zh4RU?~u~ zVZAi>B|#>Pv!r0rCeO@_{8I$a)mcEYY$uVmjU72Tf!!N>5owg0_=8DS-%&;@(cg2Q z08gly06CkUaf7cZ5kv{HaH+G+0KoRwKHX=PYM%1iMHk*XM8n8zV15Gd zn>97P-Uw4&{+F2nQD_5s*3WHJ^ZLYfp)Z*MH6+alwu=#T(8}yvyn?KEIyO81ypdUt zYqzEhFsh&>vd1JF#Zt!v{`?0Xmn0zB`4fzFITky?N7=Y!3F$6mO0naRf1Xi*|#zQLV9j8dEH3Izq>ik>% zRp>Oz?Wi{YtE$5zx}$nB*9VYBiH%O{eA&c^(#EwQ)Z9U zBNE~~rkdA2Qg}+@_#E*slZmP0gKw#ph84|DE-(I!jWTqNIP;-DqQow)Q`-B+H@nzT zq0ut=*(tZL0;45ZI07Rr#a|!R$Q4*$jC8Dzx8Y&rNDg*ATfLI2D`7XSTWqcS;&?9s z3B8yn{K}m%@Luqhp6^p>gMHQpO^=o{AaVSrI(NZE!b$#G?3Z@UMB&ij`6fcY{H7bu zb#qhr9Wlzd=g!lg@@%nn=0wh^Ke6QWVg~HHhZB4?ajk5GPtOp(V_my8{`!}ANfG*; zia&*Yq4ewc$x!&tji19mN}1{7zlJ8+Zr;t>Z{n3O7@U+taShq}Ew2B$STR0+TVIgs z-akK2aPp#_dWEHktjOJC=2}l z0s6=Lqj-1@iKW^`gd4-O_S<-ExG`&K_IrPR9-kVX!CKYH;`kpI#V4?rfg9tH#{T(v zPq9RJ27jEjKl7FwvnC{X`hq#_&_6c?Uw1Vao)F;DQO1 z%6hjC{UJPW91=0X|UiK&c$`3yFR@WMf~F4 zNUoFnz+kD>KTq%y%c$URpoHM$sf0xgju7j}vpy>Elslj})~=Wd$q5E&elcZ6syvKL z*A*}P4+yt*c_*W%td^y9Ni9=DiOzklWd=^4$vLi7@D$FOF_67t`s?m)%A$we&#xP~ z!1h-UXT)gtM$VZ?J*Ljc+8AOlN6hkMvA(oo42{Blc*j4P0=bA_+3C)c7|-b9?Cso&KntsK+1Kgw1CG}xkT$4;qpO}qr?{d!<| zR3C!|8fc1RXYU3_|eK`4b=OY8e{nP|BTSzSGk6jEDTZrVSq(FaUrLqMBw*_<=NTPb*i%x26)b|7$}XzXG`=eV zEAtY6{PykJm*QiZ7lZQUBfMkt$TCx{sl;>YvlqT3t24Hhx6$Cvt`E;dsF?LCa=L5pyJ8Sb(*C%G)^mDi9e zxhQnQ8DQx&O{f4k{5VsDBp==5Se3RkH&8k!kA6QnsAX^~tWW`t9Z~ZLItE z{5THOKJNmGoQx{rmvdk(pfedq(*=x6U%Q+cj-HfWZ14@ft^0Ve_t(ec_0STd2}ds} z(uP`SWBPRz$j`A3Hmy?4)5Y3aN~PNALLQkE{P>flGZOU|}b3soQgVUR!a5%CaOC6=@`E^hh&sQ3y6p^_vvvUb+DC9H|zWOtT zzdS7(EGC%oY;Lvrc}|$8r#g-PkkxEBda>j3sL6?&RFX{vZ~fYaQ@9<{RowFMdgL5om0&Y{P=aUg17WyJhWDd!k!^(zz+Ok}oksn<@As%Xg!%MLg^X@ME?Q~Nbx zDtZhVL1e&*rP-zC1@|fqDg_TV@Bf}zEnnAoCB?vGzch?Y)ddWp4{u$sHLZgOj{W8L z_pJ7#OFZ_G&Y0dL*VoQTcJ0f<)Zz4kY*_4}#KjpNaR;f4*}Fz5ZlkkMXK}Z(u?ja+ zcE7i_HSkY|Hh%i_;=G|}4IUdqNaiOl<7wm!*AW(#%ErNyk< zj?;1}tR_h;A4=^c!o@^$UIg*D=392>*>*gf@8NR)B9kF#nzRIQZonr|{)H`PE$qEF zF%cdyo&w|He!Q1%79XpPhes6kD`kBC(*x~y-vQQm$@XPExMc{Lin0@H)~FLw4dUF?YE~i>s#~*7B3iMek?$> zT*&XjK_XOa4tA^bx*wyWzckUQ5McrC6GrV?<(Y{Upqt7l^BXi4bjGxQH0~IGQfoiM zaAx%WbGBtThAgvaevylT1_ozYKhK!2E;NHFyz#AVwtz!=rxKTDUXrW)x$<(4 zMy+vtoXgI0%60YAi6wehBIGN!y?vHuR6*ZZr2F%1UiJs)ioFvW2K|m9uB)az_FtEs z)y{Tr?q}9S!y+tD z1~k_9Z#>=l_A28gr0`@lBD2DB@bpRZPC9;py%b7JTT(HS@QaYQrL}3}E^f)1gc%|E zjL23b-I90xpZ;;|jBtpnjPAy5Q&OO!F#>e^?`$r}pgVo9NiRzJ{QBpbJhKleO=pU` zji8Wf=X2^Qn5Iqbt8l*|ty^r>+mUkM@r!rAuCsIwbZ=a$Z~t53K1k;^ckbF%KhhY5 zQWmHDbN3+Ij;F#bVr+q%VAj6?P={k1-gs4&SOlMi+TCD!{z`q}ST?*HxX4Nl?IP9A zkSPhAk{9`q{krC1dM6i2BeExue;x%I`5nl-R# z+&ML2G=2Nxw8-eydKi1PI*;|S7i%UoR!ydh_*znzMgpHr@ewmw7}kokFi#EE6qkO? z{j*fWRQH~|LyV6b-u$_vXLhZ>kQ1C3O0YtC^;fVti^R@& z^}7gZz3Azd`r~h*c49aIN@yON{xUUfNIlzKMK28yJWVxkPUGMFC>q%mpQ=}PcgtXK zf>`&}P%eEvo5-LX434eaie2uH>v{DbIC${jQLuZ+VK2Gb@?-{D@I&XvJJsWOmCKFa z1$8JmU>A~i?b>zYg}9YDYrOUC%jAE44Z%b#Qjo0PQu>1bzWM`DO&M~qfkp)-wqtNZ z!Z_Zoe_T}cfZ|vk1bHR@iy)~hwQ>Ojb{5F+moox|+mN~+lfovZa;q0Xw z-K7o|y*(^B{W+6+g)3T`P3E00Kue~-PZjzN3+ zrFI*o<~Y$xE4loiAdR(*;-@%8^fdJ>R~qA=x1AC%CKVUPp{)k!L|4&w!sq^q#mUbe z{rOG!1i?X7C5IpLwf*eM=sCCLIX-jJ$J04oX5BiWJob|)E*RyQZ+%sMFFZY6Ki-eo zasm7$C8!w#%G2f6R#`j)2HHG1cujt^1bN#Rn~>3;c!((p9f|B=gT|wB0LonqjhkWw z=PpJH-Pa>k+_ye{26aT1AD=&K0DtVd4*fSUliwfP_!#q8EI7HQ_SJBRj?&2uids_~ zRLk{rJ?Im#zO1X-NV^KmRH$GUg6t|*FhorSt~nPjmYuNiy-?)zT;aKeTZ(p|6>N7n zGP9$NJYnL{#>bx%g8xhrH3x*h>@NeKQ!))O@J#d{%Iqd(<56Jw5XzyQZZ<&G9_#aE zK;XQ4cJzy|Aj$K8(RsClKC}xV@kibzO|oZh|gv&+X!(gTJ-#PjLO-fTZz?N;5lUT#4sQA z_Smupy$Swyzs-?z>wKeu`8Hsm?7gL6uQ~_wja9j~Wa~t>fr#S%A%uD(`QG>lIZWi( z3s$2W3F-Pryeddx0?4VG6Z|>V2xOCB0vsuf@!c}JmZV?;@av{AtPkkM?@l~|p!8qj zhO4p(j_Z~d9I|WReqlQ%UmFb$J6M454PZ)jvDu7yE4brSu)~iP=t|S(J(9{g9X%j&@drVhHYFNw@0> z4foeE3If>RJP4RY%YMO~-#v9dhI5f3S#L)R(y$4Ddz*G#If8<`nqVNCq`q&iQ2YJP zlNS2gV5FsrN+(;;;X8f2ndjvE=9r!mYC?FI?LCXYt&6)MtlKZ739Y|FSWtvd5K3(e z9p)iW02iYpVYAX{q2#_4?+!?Nh>hE4nk!%!mRM&oS@5|LmHHk)W(13ZoD2)PC{EPx z9}<)Hd0?rdxK15vd0U_a)N-I9Ks|&Xgy`mND*-oGj27WkXmydLmVi*dq{?yKZ|wRj zpD61y^ybrT!Gxqx{;_L6i1@K^5V6%_)h?0uJsxo4a2PsO8vAnB;p3>(6##odtx<&Z z*VTeQiTRE3Z8k8r?@3_7O9*Q5ZloK(SOe3V2+xjJ%9c0j{}jm4R2L4lhyMCt)IU$e zt`4xuj#$mdI;qX>U+u8)KwOl%_Da$ow1F%)lggHUlz9y8)<24*Z!UmV=<~>x)9r{8 zz3EXn3FlO&W3c4%rxT*Vb*McdZgnnIM(PRj3kxcQF31!Y@CBd50@!;DPQw*VpY0rd zSAotHPIo7FI}C#QOWRgszPY6efsYOrkdCy6KO0O%RA`msmJuX?D)RBmXw}DaV|b}Q zC=+j@YZD}I39M2Jz{pPiMH&4s+HcP1LDwlqae~zda0V<~)0CpXBnfa74+ob<3q2L& z2xSW{=b>-{U#1{TP|9e7+IxrW0HIdHnv~CqEKhvs!Gd2WyC}Sp^kxv4a@B*>Qq4bD zAIyU;RYe<|`2vG{{aq2%$IDniKaPQqfo0lk&`l7>h9bu-7i|cFYVx4*;sFOcb1R1# zve%<_x4ygG4=ivP@0hu-;PwOs@TCb+hyquGU^PgWXKg@KVvAtOvV^(ocY(FtYj`)$ z`Dq3`SE*R?a5^~Fx1Cf$X!;z*3JZPXa#CiF{KedgEA^qcpP*}0Dle+f;PGA=h2qkL zqKqZCv27fHrQ8tU*?Kyb@rzK_A!2I2_`VFVp6rHL;TMJ9ruZcm5Bo!OXA*Gb>LwZnYgck@Rz z7TmmTVvMd`%cX8<9GirL#+5n2bjsZL2b`N`BRq8G<(MzFkf>*xMS-E&1*wZ?KuoWm z*x;ZjVqZD*4gAZ#;>wWuce>dpD(U8>u_XLv#MeMGuA6xIy|8C)i!-?B-Xg1Gi2o1( z{4ibVduDPdn&$RiO?I)7oJl`7VyYJ@J`eFyD!dALaWgvk(831PkFy9?VS4?5eS`t< z8L!nG{iSXG!t@1~c{4boKz~O*;pJ~IKg|nH?>jUeJj1JpaKd@|{6od&?dd`He3-8Y zJKh>bYx?zNvghFY2PY+HB7-vXo*&S(q7RVAiBH#g&}NM9pC6!vhZpcdp1oPXE;*Un?#qjkQNrS0P)#>rFd#SSf z6b$;4@|b#dW{Rg%kG=>*sFXZ0y3+7u&X^$2(#L^rTei8Y!Btnco2yjN%r~F? z9|~@7%Zpl}CB*-AXr^5Um^z-pS&w_-18!8~jgNQvO`_S%X{u E2BP=Mp8x;= literal 0 HcmV?d00001 diff --git a/apps/docs/public/img/sso-dashboard-configure-autojoin-disabled.png b/apps/docs/public/img/sso-dashboard-configure-autojoin-disabled.png new file mode 100644 index 0000000000000000000000000000000000000000..513b42d86c9d416378834f91a4aa9bf728f993ea GIT binary patch literal 12035 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 literal 0 HcmV?d00001 diff --git a/apps/docs/public/img/sso-dashboard-configure-autojoin-enabled-role.png b/apps/docs/public/img/sso-dashboard-configure-autojoin-enabled-role.png new file mode 100644 index 0000000000000000000000000000000000000000..fc0e8e8bc8e0bd684f86529723acd44572158051 GIT binary patch literal 30153 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 literal 0 HcmV?d00001 diff --git a/apps/docs/public/img/sso-dashboard-configure-autojoin-enabled.png b/apps/docs/public/img/sso-dashboard-configure-autojoin-enabled.png new file mode 100644 index 0000000000000000000000000000000000000000..4a9c3e2e2d33cdd4a1513fc29426b15a77127ef3 GIT binary patch literal 20819 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 X^&Bx#UY{3&4$t#+^>bP0l+XkK(UBHx literal 0 HcmV?d00001 diff --git a/apps/docs/public/img/sso-dashboard-configure-domain-multi.png b/apps/docs/public/img/sso-dashboard-configure-domain-multi.png new file mode 100644 index 0000000000000000000000000000000000000000..c837a27161979262541f1148def6080840fdfe95 GIT binary patch literal 13934 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 CWdU>m literal 0 HcmV?d00001 diff --git a/apps/docs/public/img/sso-dashboard-configure-domain.png b/apps/docs/public/img/sso-dashboard-configure-domain.png new file mode 100644 index 0000000000000000000000000000000000000000..f7ca8ca955911b0fdfadccf20ad8cf055889609b GIT binary patch literal 10060 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 literal 0 HcmV?d00001 diff --git a/apps/docs/public/img/sso-dashboard-configure-metadata-gsuite.png b/apps/docs/public/img/sso-dashboard-configure-metadata-gsuite.png new file mode 100644 index 0000000000000000000000000000000000000000..675dc596da46d9832775e0246a1f991e3d19acc6 GIT binary patch literal 13493 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 literal 0 HcmV?d00001 diff --git a/apps/docs/public/img/sso-dashboard-configure-metadata-okta.png b/apps/docs/public/img/sso-dashboard-configure-metadata-okta.png new file mode 100644 index 0000000000000000000000000000000000000000..5a633113abbb5bb5c14fc591c6e38c024255f426 GIT binary patch literal 14532 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 D(L^@F literal 0 HcmV?d00001 diff --git a/apps/docs/public/img/sso-dashboard-disabled.png b/apps/docs/public/img/sso-dashboard-disabled.png new file mode 100644 index 0000000000000000000000000000000000000000..0a5df2efc10fd3ecad49e33694cd4f4e00695fc2 GIT binary patch literal 27430 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 NeHmrx9LYyM{}0No!sY+~ literal 0 HcmV?d00001