@columenlabs/lumen-ui 0.1.284 → 0.1.286

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -47,8 +47,8 @@ export declare function ThemeToggle({ compact }: {
47
47
  compact?: boolean;
48
48
  }): import("react").JSX.Element;
49
49
  /** Every Settings section in the order the dialog lists them: General, the product's, the groups', the app's. */
50
- export declare function allSettings(profile: ReactNode | undefined, shared?: SettingsSectionDef[], sections?: SettingsSectionDef[], security?: ReactNode, groups?: SettingsGroupDef[]): SettingsSectionDef[];
51
- export declare function LumenSettings({ open, section, onOpen, onClose, appLabel, profile, security, sections, shared, sharedLabel, groups, }: {
50
+ export declare function allSettings(profile: ReactNode | undefined, shared?: SettingsSectionDef[], sections?: SettingsSectionDef[], security?: ReactNode, groups?: SettingsGroupDef[], preferences?: ReactNode): SettingsSectionDef[];
51
+ export declare function LumenSettings({ open, section, onOpen, onClose, appLabel, profile, security, sections, shared, sharedLabel, groups, preferences, }: {
52
52
  open: boolean;
53
53
  /** The section shown; unknown ids show Profile. */
54
54
  section: string;
@@ -66,4 +66,7 @@ export declare function LumenSettings({ open, section, onOpen, onClose, appLabel
66
66
  sharedLabel?: string;
67
67
  /** More labelled groups (one per app), listed after the shared ones and before the app's own. */
68
68
  groups?: SettingsGroupDef[];
69
+ /** The app's own rows (`SettingField`s), added under General ▸ Preferences after the kit's,
70
+ * for a per-device choice that belongs with the rest rather than in a section of its own. */
71
+ preferences?: ReactNode;
69
72
  }): import("react").JSX.Element;
package/dist/settings.js CHANGED
@@ -66,9 +66,9 @@ function Appearance() {
66
66
  const prefs = usePrefs();
67
67
  return (_jsxs("div", { className: "flex flex-col", children: [_jsx(SettingRow, { label: "Theme", description: "Light, dark, or follow the device.", children: _jsx(ThemeToggle, {}) }), _jsx(SettingRow, { label: "Font", description: "The typeface for text. Numbers keep their own.", children: _jsx(LumenSelector, { label: "Font", size: "sm", className: "w-40", options: FONTS.map((f) => ({ value: f.id, label: f.label })), value: prefs.font, onChange: (v) => setPref('font', v) }) }), _jsx(SettingRow, { label: "Text size", description: "Larger text makes everything a little roomier.", children: _jsx(ToggleGroup, { type: "single", variant: "outline", size: "sm", spacing: 0, value: prefs.fontSize, onValueChange: (v) => v && setPref('fontSize', v), "aria-label": "Text size", children: FONT_SIZES.map((f) => (_jsx(ToggleGroupItem, { value: f.id, "aria-label": `${f.label} text`, children: f.label }, f.id))) }) }), _jsx(SettingRow, { label: "Glass surfaces", description: "Frosted cards and panels.", htmlFor: "settings-glass", children: _jsx(Switch, { id: "settings-glass", checked: prefs.glass, onCheckedChange: (v) => setPref('glass', v) }) })] }));
68
68
  }
69
- function Preferences() {
69
+ function Preferences({ extra }) {
70
70
  const prefs = usePrefs();
71
- return (_jsxs("div", { className: "flex flex-col", children: [_jsx(SettingRow, { label: "Time zone", description: "Every time on every desk shows in this zone.", children: _jsx(TimeZoneSelect, {}) }), _jsx(SettingRow, { label: "Observability details", description: "Show how long each card and view took to load, with its rows and when.", htmlFor: "settings-observability", children: _jsx(Switch, { id: "settings-observability", checked: prefs.observability, onCheckedChange: (v) => setPref('observability', v) }) })] }));
71
+ return (_jsxs("div", { className: "flex flex-col", children: [_jsx(SettingRow, { label: "Time zone", description: "Every time on every desk shows in this zone.", children: _jsx(TimeZoneSelect, {}) }), _jsx(SettingRow, { label: "Observability details", description: "Show how long each card and view took to load, with its rows and when.", htmlFor: "settings-observability", children: _jsx(Switch, { id: "settings-observability", checked: prefs.observability, onCheckedChange: (v) => setPref('observability', v) }) }), extra] }));
72
72
  }
73
73
  /** General: the person's own settings, the same on every app. */
74
74
  const PROFILE = {
@@ -83,7 +83,7 @@ const SECURITY = {
83
83
  icon: ShieldCheckIcon,
84
84
  description: 'How you sign in. Changes ask you to confirm it’s you.',
85
85
  };
86
- const GENERAL = [
86
+ const general = (preferences) => [
87
87
  {
88
88
  id: 'appearance',
89
89
  title: 'Appearance',
@@ -96,28 +96,28 @@ const GENERAL = [
96
96
  title: 'Preferences',
97
97
  icon: SlidersHorizontalIcon,
98
98
  description: 'Times and details on every desk, saved in this browser.',
99
- content: _jsx(Preferences, {}),
99
+ content: _jsx(Preferences, { extra: preferences }),
100
100
  },
101
101
  ];
102
- function generalSettings(profile, security) {
102
+ function generalSettings(profile, security, preferences) {
103
103
  return [
104
104
  ...(profile ? [{ ...PROFILE, content: profile }] : []),
105
105
  ...(security ? [{ ...SECURITY, content: security }] : []),
106
- ...GENERAL,
106
+ ...general(preferences),
107
107
  ];
108
108
  }
109
109
  /** Every Settings section in the order the dialog lists them: General, the product's, the groups', the app's. */
110
- export function allSettings(profile, shared = [], sections = [], security, groups = []) {
110
+ export function allSettings(profile, shared = [], sections = [], security, groups = [], preferences) {
111
111
  return [
112
- ...generalSettings(profile, security),
112
+ ...generalSettings(profile, security, preferences),
113
113
  ...shared,
114
114
  ...groups.flatMap((g) => g.sections),
115
115
  ...sections,
116
116
  ];
117
117
  }
118
- export function LumenSettings({ open, section, onOpen, onClose, appLabel, profile, security, sections = [], shared = [], sharedLabel = 'All apps', groups = [], }) {
119
- const all = allSettings(profile, shared, sections, security, groups);
120
- const general = generalSettings(profile, security);
118
+ export function LumenSettings({ open, section, onOpen, onClose, appLabel, profile, security, sections = [], shared = [], sharedLabel = 'All apps', groups = [], preferences, }) {
119
+ const all = allSettings(profile, shared, sections, security, groups, preferences);
120
+ const general = generalSettings(profile, security, preferences);
121
121
  const current = all.find((s) => s.id === section) ?? all[0];
122
122
  // The assistant opens Settings at a section (it never changes a setting); Undo puts it back as it was.
123
123
  useAssistantMoves('settings', {
package/dist/shell.d.ts CHANGED
@@ -86,6 +86,8 @@ export interface LumenShellProps {
86
86
  profile?: ReactNode;
87
87
  /** Settings ▸ General ▸ Security's content (LumenSignInMethods); no Security section without it. */
88
88
  security?: ReactNode;
89
+ /** The app's own rows (`SettingField`s) added under Settings ▸ General ▸ Preferences. */
90
+ preferences?: ReactNode;
89
91
  /** Reloads the page's data and drops every cached read (TanStack Query `invalidateQueries`);
90
92
  * shows Refresh in the header, which then mounts the page again. */
91
93
  onRefresh?: () => Promise<unknown>;
@@ -104,7 +106,7 @@ export interface LumenShellProps {
104
106
  /** The routed page (usually `<Outlet />`). */
105
107
  children: ReactNode;
106
108
  }
107
- export declare function LumenShell({ app, appLabel, brand, nav, tabs, bar, status, health, statusEnd, releases, releaseApps, settings, shared, sharedLabel, settingsGroups, user, signOutUrl, profile, security, onRefresh, hideAmounts, onLogs, headerActions, panel, finder, wrap, children, }: LumenShellProps): import("react").JSX.Element;
109
+ export declare function LumenShell({ app, appLabel, brand, nav, tabs, bar, status, health, statusEnd, releases, releaseApps, settings, shared, sharedLabel, settingsGroups, user, signOutUrl, profile, security, preferences, onRefresh, hideAmounts, onLogs, headerActions, panel, finder, wrap, children, }: LumenShellProps): import("react").JSX.Element;
108
110
  /** A status bar entry: an optional health dot, a label and its value ("Mail · Up to date"). */
109
111
  export declare function StatusItem({ label, value, ok, className, }: {
110
112
  label: ReactNode;
package/dist/shell.js CHANGED
@@ -99,7 +99,7 @@ const settingsFromUrl = (() => {
99
99
  window.history.replaceState(window.history.state, '', url);
100
100
  return at || 'profile';
101
101
  })();
102
- export function LumenShell({ app, appLabel, brand, nav, tabs, bar, status, health, statusEnd, releases, releaseApps, settings, shared, sharedLabel, settingsGroups, user = null, signOutUrl, profile, security, onRefresh, hideAmounts = false, onLogs, headerActions = null, panel, finder, wrap = (frame) => frame, children, }) {
102
+ export function LumenShell({ app, appLabel, brand, nav, tabs, bar, status, health, statusEnd, releases, releaseApps, settings, shared, sharedLabel, settingsGroups, user = null, signOutUrl, profile, security, preferences, onRefresh, hideAmounts = false, onLogs, headerActions = null, panel, finder, wrap = (frame) => frame, children, }) {
103
103
  const [statusSlot, setStatusSlot] = useState(null);
104
104
  const [dockSlot, setDockSlot] = useState(null);
105
105
  const [refreshing, setRefreshing] = useState(false);
@@ -129,7 +129,7 @@ export function LumenShell({ app, appLabel, brand, nav, tabs, bar, status, healt
129
129
  document.documentElement.dataset.app = app;
130
130
  }, [app]);
131
131
  // Find lists every Settings section by name.
132
- const sectionNames = JSON.stringify(allSettings(profile, shared, settings, security, settingsGroups).map((s) => ({
132
+ const sectionNames = JSON.stringify(allSettings(profile, shared, settings, security, settingsGroups, preferences).map((s) => ({
133
133
  id: s.id,
134
134
  title: s.title,
135
135
  })));
@@ -145,7 +145,7 @@ export function LumenShell({ app, appLabel, brand, nav, tabs, bar, status, healt
145
145
  refreshing,
146
146
  hideAmounts,
147
147
  headerActions,
148
- }, children: _jsx(StatusBarProvider, { children: _jsx(DockSlot.Provider, { value: dockSlot, children: _jsx(StatusSignals, { app: app, model: bar, openSettings: openSettings, children: _jsx(SourceHealthProvider, { children: wrap(_jsx(TooltipProvider, { delayDuration: 200, children: _jsx(SidebarProvider, { defaultOpen: sidebarOpen(), children: _jsxs(LumenFinder, { app: app, settings: findSettings, openSettings: openSettings, config: finder, children: [_jsx(CloseDrawerOnNavigate, {}), _jsxs(Sidebar, { collapsible: "icon", children: [_jsx(SidebarHeader, { children: brand }), _jsx(SidebarContent, { children: nav }), _jsx(SidebarFooter, { children: _jsx(NavUser, { who: user, signOutUrl: signOutUrl, onSettings: () => openSettings(), onLogs: onLogs }) }), _jsx(SidebarRail, {})] }), _jsxs(SidebarInset, { className: "flex min-h-svh min-w-0 flex-col", children: [_jsx(SignalBanners, {}), _jsx("div", { className: "flex min-w-0 flex-1 flex-col", children: children }, epoch), _jsx(LumenStatusBar, { app: app, model: bar, legacy: status, slot: setStatusSlot, end: _jsxs(_Fragment, { children: [health, releases && _jsx(WhatsNew, { api: releases, apps: releaseApps }), statusEnd, _jsx(StatusTimeZone, {})] }) }), tabs && _jsx(LumenTabBar, { items: tabs })] }), _jsx("div", { ref: setDockSlot, "data-slot": "shell-dock", className: "contents" }), panel, _jsx(LumenSettings, { open: settingsAt !== null, section: settingsAt ?? lastSection, onOpen: openSettings, onClose: () => setSettingsAt(null), appLabel: appLabel, profile: profile, security: security, sections: settings, shared: shared, sharedLabel: sharedLabel, groups: settingsGroups }), _jsx(Toaster, { position: "bottom-right" })] }) }) })) }) }) }) }) }) }));
148
+ }, children: _jsx(StatusBarProvider, { children: _jsx(DockSlot.Provider, { value: dockSlot, children: _jsx(StatusSignals, { app: app, model: bar, openSettings: openSettings, children: _jsx(SourceHealthProvider, { children: wrap(_jsx(TooltipProvider, { delayDuration: 200, children: _jsx(SidebarProvider, { defaultOpen: sidebarOpen(), children: _jsxs(LumenFinder, { app: app, settings: findSettings, openSettings: openSettings, config: finder, children: [_jsx(CloseDrawerOnNavigate, {}), _jsxs(Sidebar, { collapsible: "icon", children: [_jsx(SidebarHeader, { children: brand }), _jsx(SidebarContent, { children: nav }), _jsx(SidebarFooter, { children: _jsx(NavUser, { who: user, signOutUrl: signOutUrl, onSettings: () => openSettings(), onLogs: onLogs }) }), _jsx(SidebarRail, {})] }), _jsxs(SidebarInset, { className: "flex min-h-svh min-w-0 flex-col", children: [_jsx(SignalBanners, {}), _jsx("div", { className: "flex min-w-0 flex-1 flex-col", children: children }, epoch), _jsx(LumenStatusBar, { app: app, model: bar, legacy: status, slot: setStatusSlot, end: _jsxs(_Fragment, { children: [health, releases && _jsx(WhatsNew, { api: releases, apps: releaseApps }), statusEnd, _jsx(StatusTimeZone, {})] }) }), tabs && _jsx(LumenTabBar, { items: tabs })] }), _jsx("div", { ref: setDockSlot, "data-slot": "shell-dock", className: "contents" }), panel, _jsx(LumenSettings, { open: settingsAt !== null, section: settingsAt ?? lastSection, onOpen: openSettings, onClose: () => setSettingsAt(null), appLabel: appLabel, profile: profile, security: security, sections: settings, shared: shared, sharedLabel: sharedLabel, groups: settingsGroups, preferences: preferences }), _jsx(Toaster, { position: "bottom-right" })] }) }) })) }) }) }) }) }) }));
149
149
  }
150
150
  /** A status bar entry: an optional health dot, a label and its value ("Mail · Up to date"). */
151
151
  export function StatusItem({ label, value, ok, className, }) {
@@ -12,25 +12,25 @@ function DropdownMenuTrigger({ ...props }) {
12
12
  return _jsx(DropdownMenuPrimitive.Trigger, { "data-slot": "dropdown-menu-trigger", ...props });
13
13
  }
14
14
  function DropdownMenuContent({ className, align = 'start', sideOffset = 4, ...props }) {
15
- return (_jsx(DropdownMenuPrimitive.Portal, { children: _jsx(DropdownMenuPrimitive.Content, { "data-slot": "dropdown-menu-content", sideOffset: sideOffset, align: align, className: cn('data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 ring-foreground/10 bg-popover text-popover-foreground min-w-32 rounded-lg p-1 shadow-md ring-1 duration-100 cn-menu-target cn-menu-translucent z-50 max-h-(--radix-dropdown-menu-content-available-height) w-(--radix-dropdown-menu-trigger-width) origin-(--radix-dropdown-menu-content-transform-origin) overflow-x-hidden overflow-y-auto data-[state=closed]:overflow-hidden', className), ...props }) }));
15
+ return (_jsx(DropdownMenuPrimitive.Portal, { children: _jsx(DropdownMenuPrimitive.Content, { "data-slot": "dropdown-menu-content", sideOffset: sideOffset, align: align, className: cn('data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 ring-foreground/10 bg-popover text-popover-foreground min-w-32 rounded-lg p-1 shadow-md ring-1 duration-100 cn-menu-target cn-menu-translucent z-50 max-h-(--radix-dropdown-menu-content-available-height) w-max min-w-(--radix-dropdown-menu-trigger-width) max-w-[calc(100vw-1rem)] origin-(--radix-dropdown-menu-content-transform-origin) overflow-x-hidden overflow-y-auto data-[state=closed]:overflow-hidden', className), ...props }) }));
16
16
  }
17
17
  function DropdownMenuGroup({ ...props }) {
18
18
  return _jsx(DropdownMenuPrimitive.Group, { "data-slot": "dropdown-menu-group", ...props });
19
19
  }
20
20
  function DropdownMenuItem({ className, inset, variant = 'default', ...props }) {
21
- return (_jsx(DropdownMenuPrimitive.Item, { "data-slot": "dropdown-menu-item", "data-inset": inset, "data-variant": variant, className: cn("focus:bg-accent focus:text-accent-foreground data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 dark:data-[variant=destructive]:focus:bg-destructive/20 data-[variant=destructive]:focus:text-destructive data-[variant=destructive]:*:[svg]:text-destructive not-data-[variant=destructive]:focus:**:text-accent-foreground gap-1.5 rounded-md px-1.5 py-1 text-sm data-inset:pl-7 [&_svg:not([class*='size-'])]:size-4 group/dropdown-menu-item relative flex cursor-default items-center outline-hidden select-none data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0", className), ...props }));
21
+ return (_jsx(DropdownMenuPrimitive.Item, { "data-slot": "dropdown-menu-item", "data-inset": inset, "data-variant": variant, className: cn("focus:bg-accent focus:text-accent-foreground data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 dark:data-[variant=destructive]:focus:bg-destructive/20 data-[variant=destructive]:focus:text-destructive data-[variant=destructive]:*:[svg]:text-destructive not-data-[variant=destructive]:focus:**:text-accent-foreground gap-1.5 rounded-md px-1.5 py-1 text-sm data-inset:pl-7 whitespace-nowrap [&_svg:not([class*='size-'])]:size-4 group/dropdown-menu-item relative flex cursor-default items-center outline-hidden select-none data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0", className), ...props }));
22
22
  }
23
23
  function DropdownMenuCheckboxItem({ className, children, checked, inset, ...props }) {
24
- return (_jsxs(DropdownMenuPrimitive.CheckboxItem, { "data-slot": "dropdown-menu-checkbox-item", "data-inset": inset, className: cn("focus:bg-accent focus:text-accent-foreground focus:**:text-accent-foreground gap-1.5 rounded-md py-1 pr-8 pl-1.5 text-sm data-inset:pl-7 [&_svg:not([class*='size-'])]:size-4 relative flex cursor-default items-center outline-hidden select-none data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0", className), checked: checked, ...props, children: [_jsx("span", { className: "absolute right-2 flex items-center justify-center pointer-events-none", "data-slot": "dropdown-menu-checkbox-item-indicator", children: _jsx(DropdownMenuPrimitive.ItemIndicator, { children: _jsx(CheckIcon, {}) }) }), children] }));
24
+ return (_jsxs(DropdownMenuPrimitive.CheckboxItem, { "data-slot": "dropdown-menu-checkbox-item", "data-inset": inset, className: cn("focus:bg-accent focus:text-accent-foreground focus:**:text-accent-foreground gap-1.5 rounded-md py-1 pr-8 pl-1.5 text-sm data-inset:pl-7 whitespace-nowrap [&_svg:not([class*='size-'])]:size-4 relative flex cursor-default items-center outline-hidden select-none data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0", className), checked: checked, ...props, children: [_jsx("span", { className: "absolute right-2 flex items-center justify-center pointer-events-none", "data-slot": "dropdown-menu-checkbox-item-indicator", children: _jsx(DropdownMenuPrimitive.ItemIndicator, { children: _jsx(CheckIcon, {}) }) }), children] }));
25
25
  }
26
26
  function DropdownMenuRadioGroup({ ...props }) {
27
27
  return _jsx(DropdownMenuPrimitive.RadioGroup, { "data-slot": "dropdown-menu-radio-group", ...props });
28
28
  }
29
29
  function DropdownMenuRadioItem({ className, children, inset, ...props }) {
30
- return (_jsx(DropdownMenuPrimitive.RadioItem, { "data-slot": "dropdown-menu-radio-item", "data-inset": inset, className: cn("focus:bg-accent focus:text-accent-foreground focus:**:text-accent-foreground data-[state=checked]:bg-muted gap-1.5 rounded-md py-1 pr-2 pl-1.5 text-sm data-inset:pl-7 [&_svg:not([class*='size-'])]:size-4 relative flex cursor-default items-center outline-hidden select-none data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0", className), ...props, children: children }));
30
+ return (_jsx(DropdownMenuPrimitive.RadioItem, { "data-slot": "dropdown-menu-radio-item", "data-inset": inset, className: cn("focus:bg-accent focus:text-accent-foreground focus:**:text-accent-foreground data-[state=checked]:bg-muted gap-1.5 rounded-md py-1 pr-2 pl-1.5 text-sm data-inset:pl-7 whitespace-nowrap [&_svg:not([class*='size-'])]:size-4 relative flex cursor-default items-center outline-hidden select-none data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0", className), ...props, children: children }));
31
31
  }
32
32
  function DropdownMenuLabel({ className, inset, ...props }) {
33
- return (_jsx(DropdownMenuPrimitive.Label, { "data-slot": "dropdown-menu-label", "data-inset": inset, className: cn('text-muted-foreground px-1.5 py-1 text-xs font-medium data-inset:pl-7', className), ...props }));
33
+ return (_jsx(DropdownMenuPrimitive.Label, { "data-slot": "dropdown-menu-label", "data-inset": inset, className: cn('text-muted-foreground px-1.5 py-1 text-xs font-medium data-inset:pl-7 whitespace-nowrap', className), ...props }));
34
34
  }
35
35
  function DropdownMenuSeparator({ className, ...props }) {
36
36
  return (_jsx(DropdownMenuPrimitive.Separator, { "data-slot": "dropdown-menu-separator", className: cn('bg-border -mx-1 my-1 h-px', className), ...props }));
@@ -42,7 +42,7 @@ function DropdownMenuSub({ ...props }) {
42
42
  return _jsx(DropdownMenuPrimitive.Sub, { "data-slot": "dropdown-menu-sub", ...props });
43
43
  }
44
44
  function DropdownMenuSubTrigger({ className, inset, children, ...props }) {
45
- return (_jsxs(DropdownMenuPrimitive.SubTrigger, { "data-slot": "dropdown-menu-sub-trigger", "data-inset": inset, className: cn("focus:bg-accent focus:text-accent-foreground data-open:bg-accent data-open:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground gap-1.5 rounded-md px-1.5 py-1 text-sm data-inset:pl-7 [&_svg:not([class*='size-'])]:size-4 flex cursor-default items-center outline-hidden select-none [&_svg]:pointer-events-none [&_svg]:shrink-0", className), ...props, children: [children, _jsx(ChevronRightIcon, { className: "cn-rtl-flip ml-auto" })] }));
45
+ return (_jsxs(DropdownMenuPrimitive.SubTrigger, { "data-slot": "dropdown-menu-sub-trigger", "data-inset": inset, className: cn("focus:bg-accent focus:text-accent-foreground data-open:bg-accent data-open:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground gap-1.5 rounded-md px-1.5 py-1 text-sm data-inset:pl-7 whitespace-nowrap [&_svg:not([class*='size-'])]:size-4 flex cursor-default items-center outline-hidden select-none [&_svg]:pointer-events-none [&_svg]:shrink-0", className), ...props, children: [children, _jsx(ChevronRightIcon, { className: "cn-rtl-flip ml-auto" })] }));
46
46
  }
47
47
  function DropdownMenuSubContent({ className, ...props }) {
48
48
  return (_jsx(DropdownMenuPrimitive.SubContent, { "data-slot": "dropdown-menu-sub-content", className: cn('data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 ring-foreground/10 bg-popover text-popover-foreground min-w-[96px] rounded-lg p-1 shadow-lg ring-1 duration-100 cn-menu-target cn-menu-translucent z-50 origin-(--radix-dropdown-menu-content-transform-origin) overflow-hidden', className), ...props }));
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@columenlabs/lumen-ui",
3
- "version": "0.1.284",
3
+ "version": "0.1.286",
4
4
  "description": "Lumen: shared React components (frame, views, widgets, charts, drawers).",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -49,7 +49,7 @@
49
49
  "@codemirror/lang-javascript": "6.2.5",
50
50
  "@codemirror/lang-json": "6.0.2",
51
51
  "@codemirror/lang-sql": "6.10.0",
52
- "@columenlabs/lumen-ui-types": "0.1.284",
52
+ "@columenlabs/lumen-ui-types": "0.1.286",
53
53
  "@dnd-kit/core": "6.3.1",
54
54
  "@dnd-kit/sortable": "10.0.0",
55
55
  "@dnd-kit/utilities": "3.2.2",