Skip to content

Commit 133dee5

Browse files
Bill LeoutsakosBill Leoutsakos
authored andcommitted
Consolidate compact popover menus and embedded panels
1 parent 316fea0 commit 133dee5

11 files changed

Lines changed: 39 additions & 38 deletions

File tree

‎apps/sim/app/o/[organizationId]/settings/components/integrations/organization-search-stats-period.tsx‎

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,8 @@ export function OrganizationSearchStatsPeriod({
6161
tabIndex={-1}
6262
align='end'
6363
sideOffset={4}
64-
className='w-auto p-0'
64+
padding='none'
65+
className='w-auto'
6566
onOpenAutoFocus={() => calendarRef.current?.focus()}
6667
onCloseAutoFocus={() =>
6768
triggerContainerRef.current?.querySelector<HTMLElement>('[role="combobox"]')?.focus()

‎apps/sim/app/workspace/[workspaceId]/components/resource/components/resource-header/resource-header.tsx‎

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -518,7 +518,7 @@ function BreadcrumbLocationPopover({
518518
return (
519519
<>
520520
<LocationFocusVeil visible={open} boundaryRef={veilBoundaryRef} />
521-
<Popover size='md' open={open} onOpenChange={setOpen}>
521+
<Popover size='compact' open={open} onOpenChange={setOpen}>
522522
<PopoverAnchor asChild>
523523
<button
524524
type='button'
@@ -560,14 +560,12 @@ function BreadcrumbLocationPopover({
560560
maxWidth={300}
561561
maxHeight={420}
562562
border
563-
className={cn(
564-
POPOVER_ANIMATION_CLASSES,
565-
'bg-[var(--bg)] p-1.5 text-[var(--text-body)] shadow-xs'
566-
)}
563+
appearance='menu'
564+
className={POPOVER_ANIMATION_CLASSES}
567565
onMouseEnter={openPopover}
568566
onMouseLeave={scheduleClose}
569567
>
570-
<PopoverSection className='px-1.5 py-0.5 text-[var(--text-muted)] text-xs'>
568+
<PopoverSection>
571569
<span className='inline-flex items-center gap-1'>
572570
<span>Path</span>
573571
<span className='opacity-70'>/</span>
@@ -675,11 +673,7 @@ function BreadcrumbLocationItem({
675673

676674
if (onClick) {
677675
return (
678-
<PopoverItem
679-
active={active}
680-
onClick={onClick}
681-
className='h-7 items-center gap-1.5 px-1.5 py-0 text-xs'
682-
>
676+
<PopoverItem active={active} onClick={onClick}>
683677
{labelContent}
684678
</PopoverItem>
685679
)

‎apps/sim/app/workspace/[workspaceId]/home/components/message-content/components/message-sources/message-sources.tsx‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ export function MessageSources({ sources }: MessageSourcesProps) {
3636
</Tooltip.Trigger>
3737
<Tooltip.Content side='top'>{label}</Tooltip.Content>
3838
</Tooltip.Root>
39-
<PopoverContent align='start' side='top' sideOffset={4} className='w-[420px] p-0'>
39+
<PopoverContent align='start' side='top' sideOffset={4} padding='none' className='w-[420px]'>
4040
<div className='flex flex-col py-1'>
4141
{sources.map((source) => (
4242
<SourceCard key={source.url} source={source} dense />

‎apps/sim/app/workspace/[workspaceId]/logs/logs.tsx‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1571,7 +1571,7 @@ function LogsFilterPanel({ searchQuery, onSearchQueryChange }: LogsFilterPanelPr
15711571
}}
15721572
>
15731573
<PopoverAnchor className='pointer-events-none absolute inset-0' />
1574-
<PopoverContent align='start' sideOffset={4} className='w-auto p-0'>
1574+
<PopoverContent align='start' sideOffset={4} padding='none' className='w-auto'>
15751575
<Calendar
15761576
mode='range'
15771577
showTime

‎apps/sim/app/workspace/[workspaceId]/settings/billing/credit-usage/credit-usage-view.tsx‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -192,7 +192,7 @@ export function CreditUsageView({ backHref = '/account/settings/billing' }: Cred
192192
}}
193193
>
194194
<PopoverAnchor className='pointer-events-none absolute inset-0' />
195-
<PopoverContent align='start' sideOffset={4} className='w-auto p-0'>
195+
<PopoverContent align='start' sideOffset={4} padding='none' className='w-auto'>
196196
<Calendar
197197
mode='range'
198198
showTime

‎apps/sim/app/workspace/[workspaceId]/tables/[tableId]/components/table-grid/cells/inline-editors.tsx‎

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -291,7 +291,8 @@ function ReadyInlineDateEditor({
291291
ref={popoverRef}
292292
align='start'
293293
sideOffset={4}
294-
className='w-auto p-0'
294+
padding='none'
295+
className='w-auto'
295296
onPointerDownCapture={handlePopoverPointerDown}
296297
onBlurCapture={scheduleBlurSave}
297298
>

‎apps/sim/app/workspace/[workspaceId]/tables/[tableId]/components/views-menu/views-menu.tsx‎

Lines changed: 6 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ export const ViewsMenu = memo(function ViewsMenu({
107107
}, [])
108108

109109
return (
110-
<Popover size='md' open={open} onOpenChange={setOpen}>
110+
<Popover size='compact' open={open} onOpenChange={setOpen}>
111111
<PopoverAnchor asChild>
112112
<button
113113
type='button'
@@ -135,17 +135,13 @@ export const ViewsMenu = memo(function ViewsMenu({
135135
maxWidth={320}
136136
maxHeight={420}
137137
border
138-
className={cn(
139-
POPOVER_ANIMATION_CLASSES,
140-
'bg-[var(--bg)] p-1.5 text-[var(--text-body)] shadow-xs'
141-
)}
138+
appearance='menu'
139+
className={POPOVER_ANIMATION_CLASSES}
142140
onMouseEnter={openPopover}
143141
onMouseLeave={scheduleClose}
144142
onFocusCapture={cancelScheduledClose}
145143
>
146-
<PopoverSection className='px-1.5 py-0.5 text-[var(--text-muted)] text-xs'>
147-
Views
148-
</PopoverSection>
144+
<PopoverSection>Views</PopoverSection>
149145
<div className='flex flex-col gap-0.5'>
150146
{!hasDefaultView && (
151147
<ViewRow
@@ -195,10 +191,7 @@ export const ViewsMenu = memo(function ViewsMenu({
195191
{canEdit && (
196192
<>
197193
<div className='my-1 h-px bg-[var(--border)]' />
198-
<PopoverItem
199-
onClick={() => runAndClose(onNewView)}
200-
className='h-7 items-center gap-1.5 px-1.5 py-0 text-xs'
201-
>
194+
<PopoverItem onClick={() => runAndClose(onNewView)}>
202195
<span className='flex size-[14px] shrink-0 items-center justify-center'>
203196
<Plus className='size-3 text-[var(--text-icon)]' />
204197
</span>
@@ -265,11 +258,7 @@ function ViewRow({ label, isActive, onSelect, defaultState, actions }: ViewRowPr
265258

266259
return (
267260
<div className='group/view relative flex items-center'>
268-
<PopoverItem
269-
active={isActive}
270-
onClick={onSelect}
271-
className='h-7 min-w-0 flex-1 items-center gap-1.5 px-1.5 py-0 text-xs'
272-
>
261+
<PopoverItem active={isActive} onClick={onSelect} className='flex-1'>
273262
<span className='flex size-[14px] shrink-0 items-center justify-center'>
274263
{isActive && <Check className='size-3 text-[var(--text-icon)]' />}
275264
</span>

‎apps/sim/ee/audit-logs/components/audit-logs.tsx‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -555,7 +555,7 @@ export function AuditLogs({ organizationId }: AuditLogsProps) {
555555
}}
556556
>
557557
<PopoverAnchor className='pointer-events-none absolute inset-0' />
558-
<PopoverContent align='start' sideOffset={4} className='w-auto p-0'>
558+
<PopoverContent align='start' sideOffset={4} padding='none' className='w-auto'>
559559
<Calendar
560560
mode='range'
561561
showTime

‎apps/sim/ee/organization-usage/components/usage-monitoring.tsx‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -321,7 +321,7 @@ export function UsageMonitoring({
321321
}}
322322
>
323323
<PopoverAnchor className='pointer-events-none absolute inset-0' />
324-
<PopoverContent align='end' sideOffset={4} className='w-auto p-0'>
324+
<PopoverContent align='end' sideOffset={4} padding='none' className='w-auto'>
325325
{/** Calendar-day bounds stay date-only; the server makes the end exclusive. */}
326326
<Calendar
327327
mode='range'

‎packages/emcn/src/components/popover/popover.tsx‎

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ import { chipActiveSurfaceClass, chipHoverSurfaceClass } from '../chip/chip-chro
5959
import { InsideModalContext } from '../modal/modal'
6060
import { TOOLTIP_MAX_WIDTH_PX, TOOLTIP_SURFACE_CLASS } from '../tooltip/tooltip-styles'
6161

62-
type PopoverSize = 'sm' | 'md'
62+
type PopoverSize = 'sm' | 'md' | 'compact'
6363
type PopoverColorScheme = 'default' | 'inverted'
6464

6565
/**
@@ -82,6 +82,11 @@ const STYLES = {
8282
icon: 'size-[14px]',
8383
section: 'px-1.5 py-1 text-xs',
8484
},
85+
compact: {
86+
item: 'h-7 gap-1.5 px-1.5 py-0 text-xs',
87+
icon: 'size-3',
88+
section: 'px-1.5 py-0.5 text-xs',
89+
},
8590
} satisfies Record<PopoverSize, { item: string; icon: string; section: string }>,
8691

8792
/** Color scheme variants */
@@ -189,6 +194,7 @@ export interface PopoverProps extends PopoverPrimitive.PopoverProps {
189194
* Size variant of the popover
190195
* - sm: 11px text, compact spacing (for logs, notifications, context menus)
191196
* - md: 13px text, default spacing
197+
* - compact: 11px text, 28px rows for location and views menus
192198
* @default 'md'
193199
*/
194200
size?: PopoverSize
@@ -401,7 +407,12 @@ interface PopoverContentProps
401407
* Applies a semantic platform surface treatment.
402408
* @default 'default'
403409
*/
404-
appearance?: 'default' | 'tooltip'
410+
appearance?: 'default' | 'tooltip' | 'menu'
411+
/**
412+
* Removes the content's inset padding for embedded calendars and panels.
413+
* @default 'default'
414+
*/
415+
padding?: 'default' | 'none'
405416
/**
406417
* Flip to avoid viewport collisions
407418
* @default true
@@ -443,6 +454,7 @@ const PopoverContent = React.forwardRef<
443454
collisionPadding = 8,
444455
border = false,
445456
appearance = 'default',
457+
padding = 'default',
446458
avoidCollisions = true,
447459
showArrow = false,
448460
arrowClassName,
@@ -614,6 +626,8 @@ const PopoverContent = React.forwardRef<
614626
STYLES.colorScheme[colorScheme].content,
615627
STYLES.content,
616628
appearance === 'tooltip' && TOOLTIP_SURFACE_CLASS,
629+
appearance === 'menu' && 'bg-[var(--bg)] text-[var(--text-body)] shadow-xs',
630+
padding === 'none' && 'p-0',
617631
hasUserWidthConstraint &&
618632
'[&_.flex-1:not([data-popover-scroll])]:truncate [&_[data-popover-section]]:truncate',
619633
border && 'border border-[var(--border-1)]',
@@ -842,6 +856,7 @@ const PopoverSection = React.forwardRef<HTMLDivElement, PopoverSectionProps>(
842856
'mt-1.5 min-w-0 first:mt-0 first:pt-0',
843857
STYLES.colorScheme[colorScheme].section,
844858
STYLES.size[size].section,
859+
size === 'compact' && colorScheme === 'default' && 'text-[var(--text-muted)]',
845860
className
846861
)}
847862
data-popover-section=''

0 commit comments

Comments
 (0)