@xenide-io/the-old-ui-theme 0.5.2 → 0.5.3
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.
- package/README.md +47 -34
- package/dist/{chunk-RZXHZWUB.mjs → chunk-VFTZXPXM.mjs} +30 -143
- package/dist/index.d.mts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +30 -143
- package/dist/index.mjs +1 -1
- package/dist/suite.d.mts +19 -14
- package/dist/suite.d.ts +19 -14
- package/dist/suite.js +168 -96
- package/dist/suite.mjs +168 -96
- package/dist/ui.js +30 -143
- package/dist/ui.mjs +1 -1
- package/package.json +1 -1
- package/src/app/globals.css +1 -0
- package/src/components/ui/ThemeSwitcher.tsx +12 -3
- package/src/styles/suite-skin.css +71 -1
- package/src/styles/themes.css +445 -1656
- package/src/suite/components/suite-app-layout.tsx +31 -10
- package/src/suite/components/suite-sidebar.tsx +50 -42
- package/src/suite/components/suite-user-menu.tsx +48 -26
- package/src/suite/components/today-page-frame.tsx +1 -1
- package/src/suite/icons/app-accents.ts +38 -43
- package/src/suite/icons/glyph-parts.tsx +16 -9
- package/src/suite/icons/glyphs.ts +130 -99
- package/src/suite/lib/apps.ts +1 -1
- package/src/suite/lib/use-sidebar-width.ts +23 -8
package/dist/index.mjs
CHANGED
package/dist/suite.d.mts
CHANGED
|
@@ -4,7 +4,7 @@ import { ClassValue } from 'clsx';
|
|
|
4
4
|
export { m } from 'motion/react';
|
|
5
5
|
|
|
6
6
|
/**
|
|
7
|
-
* Today page content wrapper with soft
|
|
7
|
+
* Today page content wrapper with a soft themed visual treatment.
|
|
8
8
|
* Does not own scrolling — `#main-content` is the scrollport so sticky headers work.
|
|
9
9
|
* Glow/clouds are absolute and do not create a nested scrollport.
|
|
10
10
|
*/
|
|
@@ -319,16 +319,17 @@ interface SuiteUserMenuProps {
|
|
|
319
319
|
onSignOut: () => void;
|
|
320
320
|
/** Fallback letter(s) when there is no avatar image. */
|
|
321
321
|
fallbackInitials?: string;
|
|
322
|
+
/** Show the old desktop sidebar sign-out action beside the avatar. */
|
|
323
|
+
showSignOutAction?: boolean;
|
|
322
324
|
dataTest?: string;
|
|
323
325
|
className?: string;
|
|
324
326
|
}
|
|
325
327
|
/**
|
|
326
|
-
* Suite account context menu — one tap on the avatar opens a small menu
|
|
327
|
-
*
|
|
328
|
-
*
|
|
329
|
-
* logout icon cluttering the mobile chrome).
|
|
328
|
+
* Suite account context menu — one tap on the avatar opens a small menu with
|
|
329
|
+
* profile settings and sign out. Desktop sidebars can also expose the legacy
|
|
330
|
+
* adjacent sign-out action without adding it to mobile chrome.
|
|
330
331
|
*/
|
|
331
|
-
declare function SuiteUserMenu({ name, email, image, settingsHref, onSignOut, fallbackInitials, dataTest, className, }: SuiteUserMenuProps): react.JSX.Element;
|
|
332
|
+
declare function SuiteUserMenu({ name, email, image, settingsHref, onSignOut, fallbackInitials, showSignOutAction, dataTest, className, }: SuiteUserMenuProps): react.JSX.Element;
|
|
332
333
|
|
|
333
334
|
/** Any icon component that accepts sizing/stroke props (Lucide, theme icons). */
|
|
334
335
|
type SuiteNavIcon = ComponentType<{
|
|
@@ -368,7 +369,7 @@ interface SuiteAppDefinition {
|
|
|
368
369
|
slug: SuiteAppSlug;
|
|
369
370
|
name: string;
|
|
370
371
|
description: string;
|
|
371
|
-
/** Public asset path — every app hosts
|
|
372
|
+
/** Public asset path — every app hosts its suite icon. */
|
|
372
373
|
icon: string;
|
|
373
374
|
/** Landing route used after cross-app SSO redirect. */
|
|
374
375
|
landing: string;
|
|
@@ -506,19 +507,20 @@ declare function SuiteAiPanel({ presets, emptyState, title, fetchChat, sendMessa
|
|
|
506
507
|
* colour like any lucide icon.
|
|
507
508
|
*/
|
|
508
509
|
type SuiteGlyphElement = {
|
|
509
|
-
kind:
|
|
510
|
+
kind: "path";
|
|
510
511
|
d: string;
|
|
511
512
|
accent?: boolean;
|
|
512
513
|
filled?: boolean;
|
|
514
|
+
transform?: string;
|
|
513
515
|
} | {
|
|
514
|
-
kind:
|
|
516
|
+
kind: "circle";
|
|
515
517
|
cx: number;
|
|
516
518
|
cy: number;
|
|
517
519
|
r: number;
|
|
518
520
|
accent?: boolean;
|
|
519
521
|
filled?: boolean;
|
|
520
522
|
} | {
|
|
521
|
-
kind:
|
|
523
|
+
kind: "rect";
|
|
522
524
|
x: number;
|
|
523
525
|
y: number;
|
|
524
526
|
width: number;
|
|
@@ -537,7 +539,7 @@ interface SuiteGlyph {
|
|
|
537
539
|
*/
|
|
538
540
|
animatedAccent?: boolean;
|
|
539
541
|
}
|
|
540
|
-
type SuiteIconName =
|
|
542
|
+
type SuiteIconName = "timer-shell" | "kanban-wave" | "squid-doc" | "stack-hex" | "crew-bot" | "nakama-fist" | "workspace" | "organisation" | "integration-plug" | "suite-grid" | "bell-wave" | "today-sun";
|
|
541
543
|
declare const SUITE_GLYPHS: Record<SuiteIconName, SuiteGlyph>;
|
|
542
544
|
declare const SUITE_ICON_NAMES: SuiteIconName[];
|
|
543
545
|
|
|
@@ -547,7 +549,7 @@ declare const SUITE_ICON_NAMES: SuiteIconName[];
|
|
|
547
549
|
* `onTileAccent` drive `<SuiteAppIcon>` (the programmatic favicon-style
|
|
548
550
|
* tile + glyph mark).
|
|
549
551
|
*/
|
|
550
|
-
type SuiteAccentSlug =
|
|
552
|
+
type SuiteAccentSlug = "turtletime" | "tides" | "kraken" | "shellstack" | "crew" | "nakama";
|
|
551
553
|
interface SuiteAppAccent {
|
|
552
554
|
/** Display name (default aria label for app marks). */
|
|
553
555
|
label: string;
|
|
@@ -618,12 +620,13 @@ declare const SIDEBAR_DEFAULT_WIDTH = 320;
|
|
|
618
620
|
* Shared suite sidebar resizing: drag below the threshold to collapse,
|
|
619
621
|
* drag the rail edge out to expand, and double-click to reset.
|
|
620
622
|
*/
|
|
621
|
-
declare function useSidebarWidth(storageKey: string): {
|
|
623
|
+
declare function useSidebarWidth(storageKey: string, defaultWidth?: number): {
|
|
622
624
|
width: number;
|
|
623
625
|
collapsed: boolean;
|
|
624
626
|
setCollapsed: (value: boolean) => void;
|
|
625
627
|
resetWidth: () => void;
|
|
626
628
|
startResize: (event: PointerEvent<HTMLDivElement>) => void;
|
|
629
|
+
resizeBy: (delta: number) => void;
|
|
627
630
|
};
|
|
628
631
|
|
|
629
632
|
declare function cn(...inputs: ClassValue[]): string;
|
|
@@ -857,6 +860,8 @@ interface SuiteAppLayoutProps {
|
|
|
857
860
|
lockMainScroll?: boolean;
|
|
858
861
|
/** Drag this to resize the sidebar. */
|
|
859
862
|
onStartResize?: (e: PointerEvent<HTMLDivElement>) => void;
|
|
863
|
+
/** Keyboard equivalent for the resize handle. */
|
|
864
|
+
onResizeBy?: (delta: number) => void;
|
|
860
865
|
/** Double-click to reset sidebar width. */
|
|
861
866
|
onResetWidth?: () => void;
|
|
862
867
|
className?: string;
|
|
@@ -866,6 +871,6 @@ interface SuiteAppLayoutProps {
|
|
|
866
871
|
* one `#main-content` landmark. Desktop: fixed sidebar + scrollable main.
|
|
867
872
|
* Mobile: header + main + bottom nav.
|
|
868
873
|
*/
|
|
869
|
-
declare function SuiteAppLayout({ sidebar, children, mobileHeader, bottomNav, sidebarWidth, collapsed, lockMainScroll, onStartResize, onResetWidth, className, }: SuiteAppLayoutProps): react.JSX.Element;
|
|
874
|
+
declare function SuiteAppLayout({ sidebar, children, mobileHeader, bottomNav, sidebarWidth, collapsed, lockMainScroll, onStartResize, onResizeBy, onResetWidth, className, }: SuiteAppLayoutProps): react.JSX.Element;
|
|
870
875
|
|
|
871
876
|
export { APP_ACCENTS, APP_GLYPHS, AnimatedMoon, AnimatedSun, AppSwitcher, AppSwitcherChevron, AppSwitcherMark, CommandPaletteHost, DeferredChrome, SIDEBAR_COLLAPSE_THRESHOLD, SIDEBAR_DEFAULT_WIDTH, SIDEBAR_MAX_WIDTH, SIDEBAR_MIN_EXPANDED_WIDTH, SIDEBAR_RAIL_WIDTH, SUITE_APPS, SUITE_APP_MAP, SUITE_GLYPHS, SUITE_ICON_NAMES, SUITE_OPEN_ASK_AI_EVENT, SUITE_SPRINGS, SourceAppGlyph, type SuiteAccentSlug, type SuiteAiChatMessage, SuiteAiPanel, type SuiteAiPreset, type SuiteAppAccent, type SuiteAppDefinition, type SuiteAppEntry, SuiteAppIcon, type SuiteAppIconProps, SuiteAppLayout, type SuiteAppLayoutProps, type SuiteAppSlug, SuiteAppStrip, type SuiteAskAiOpenDetail, SuiteBottomNav, type SuiteBottomNavItem, SuiteBreadcrumbs, type SuiteBreadcrumbsProps, type SuiteCommandItem, type SuiteCommandPaletteComponent, type SuiteDropdownItemComponent, type SuiteDropdownMenuComponent, type SuiteDropdownMenuProps, SuiteEmptyState, type SuiteGlyph, type SuiteGlyphElement, SuiteIcon, type SuiteIconName, type SuiteIconProps, SuiteMobileDrawer, SuiteMobileHeader, SuiteMotionProvider, type SuiteNotification, SuiteNotificationBell, type SuiteNotificationsResponse, SuitePage, SuitePageHeader, type SuitePageWidth, type SuiteResolvedTheme, SuiteSectionHeader, SuiteSettingsLayout, type SuiteSettingsLayoutProps, SuiteSettingsMobileNav, type SuiteSettingsNavItem, SuiteSidebar, type SuiteSidebarNavItem, SuiteSkeleton, SuiteSkeletonCard, SuiteSkeletonList, type SuiteSpinnerComponent, type SuiteSpringName, SuiteTabList, type SuiteTheme, type SuiteThemeConfig, type SuiteThemeContextValue, SuiteThemeProvider, SuiteToolbar, SuiteUserMenu, type SuiteUserMenuProps, TodayAskAiCard, TodayCalibrating, TodayEmptyAction, TodayEmptyState, TodayHero, TodayLayout, TodayPageFrame, TodayPanel, type TodayPrimaryAccent, TodayPrimaryAction, TodaySection, TodayTimeIcon, TodayTopBar, appSwitcherMarkClass, appSwitcherMenuItemClass, appSwitcherTriggerClass, cn, getTodayGreeting, openSuiteAskAi, resolveSuiteNotificationHref, sourceToSuiteApp, suiteAppBaseUrl, suiteAppLabel, useIdleMount, useSidebarWidth, useSuiteTheme };
|
package/dist/suite.d.ts
CHANGED
|
@@ -4,7 +4,7 @@ import { ClassValue } from 'clsx';
|
|
|
4
4
|
export { m } from 'motion/react';
|
|
5
5
|
|
|
6
6
|
/**
|
|
7
|
-
* Today page content wrapper with soft
|
|
7
|
+
* Today page content wrapper with a soft themed visual treatment.
|
|
8
8
|
* Does not own scrolling — `#main-content` is the scrollport so sticky headers work.
|
|
9
9
|
* Glow/clouds are absolute and do not create a nested scrollport.
|
|
10
10
|
*/
|
|
@@ -319,16 +319,17 @@ interface SuiteUserMenuProps {
|
|
|
319
319
|
onSignOut: () => void;
|
|
320
320
|
/** Fallback letter(s) when there is no avatar image. */
|
|
321
321
|
fallbackInitials?: string;
|
|
322
|
+
/** Show the old desktop sidebar sign-out action beside the avatar. */
|
|
323
|
+
showSignOutAction?: boolean;
|
|
322
324
|
dataTest?: string;
|
|
323
325
|
className?: string;
|
|
324
326
|
}
|
|
325
327
|
/**
|
|
326
|
-
* Suite account context menu — one tap on the avatar opens a small menu
|
|
327
|
-
*
|
|
328
|
-
*
|
|
329
|
-
* logout icon cluttering the mobile chrome).
|
|
328
|
+
* Suite account context menu — one tap on the avatar opens a small menu with
|
|
329
|
+
* profile settings and sign out. Desktop sidebars can also expose the legacy
|
|
330
|
+
* adjacent sign-out action without adding it to mobile chrome.
|
|
330
331
|
*/
|
|
331
|
-
declare function SuiteUserMenu({ name, email, image, settingsHref, onSignOut, fallbackInitials, dataTest, className, }: SuiteUserMenuProps): react.JSX.Element;
|
|
332
|
+
declare function SuiteUserMenu({ name, email, image, settingsHref, onSignOut, fallbackInitials, showSignOutAction, dataTest, className, }: SuiteUserMenuProps): react.JSX.Element;
|
|
332
333
|
|
|
333
334
|
/** Any icon component that accepts sizing/stroke props (Lucide, theme icons). */
|
|
334
335
|
type SuiteNavIcon = ComponentType<{
|
|
@@ -368,7 +369,7 @@ interface SuiteAppDefinition {
|
|
|
368
369
|
slug: SuiteAppSlug;
|
|
369
370
|
name: string;
|
|
370
371
|
description: string;
|
|
371
|
-
/** Public asset path — every app hosts
|
|
372
|
+
/** Public asset path — every app hosts its suite icon. */
|
|
372
373
|
icon: string;
|
|
373
374
|
/** Landing route used after cross-app SSO redirect. */
|
|
374
375
|
landing: string;
|
|
@@ -506,19 +507,20 @@ declare function SuiteAiPanel({ presets, emptyState, title, fetchChat, sendMessa
|
|
|
506
507
|
* colour like any lucide icon.
|
|
507
508
|
*/
|
|
508
509
|
type SuiteGlyphElement = {
|
|
509
|
-
kind:
|
|
510
|
+
kind: "path";
|
|
510
511
|
d: string;
|
|
511
512
|
accent?: boolean;
|
|
512
513
|
filled?: boolean;
|
|
514
|
+
transform?: string;
|
|
513
515
|
} | {
|
|
514
|
-
kind:
|
|
516
|
+
kind: "circle";
|
|
515
517
|
cx: number;
|
|
516
518
|
cy: number;
|
|
517
519
|
r: number;
|
|
518
520
|
accent?: boolean;
|
|
519
521
|
filled?: boolean;
|
|
520
522
|
} | {
|
|
521
|
-
kind:
|
|
523
|
+
kind: "rect";
|
|
522
524
|
x: number;
|
|
523
525
|
y: number;
|
|
524
526
|
width: number;
|
|
@@ -537,7 +539,7 @@ interface SuiteGlyph {
|
|
|
537
539
|
*/
|
|
538
540
|
animatedAccent?: boolean;
|
|
539
541
|
}
|
|
540
|
-
type SuiteIconName =
|
|
542
|
+
type SuiteIconName = "timer-shell" | "kanban-wave" | "squid-doc" | "stack-hex" | "crew-bot" | "nakama-fist" | "workspace" | "organisation" | "integration-plug" | "suite-grid" | "bell-wave" | "today-sun";
|
|
541
543
|
declare const SUITE_GLYPHS: Record<SuiteIconName, SuiteGlyph>;
|
|
542
544
|
declare const SUITE_ICON_NAMES: SuiteIconName[];
|
|
543
545
|
|
|
@@ -547,7 +549,7 @@ declare const SUITE_ICON_NAMES: SuiteIconName[];
|
|
|
547
549
|
* `onTileAccent` drive `<SuiteAppIcon>` (the programmatic favicon-style
|
|
548
550
|
* tile + glyph mark).
|
|
549
551
|
*/
|
|
550
|
-
type SuiteAccentSlug =
|
|
552
|
+
type SuiteAccentSlug = "turtletime" | "tides" | "kraken" | "shellstack" | "crew" | "nakama";
|
|
551
553
|
interface SuiteAppAccent {
|
|
552
554
|
/** Display name (default aria label for app marks). */
|
|
553
555
|
label: string;
|
|
@@ -618,12 +620,13 @@ declare const SIDEBAR_DEFAULT_WIDTH = 320;
|
|
|
618
620
|
* Shared suite sidebar resizing: drag below the threshold to collapse,
|
|
619
621
|
* drag the rail edge out to expand, and double-click to reset.
|
|
620
622
|
*/
|
|
621
|
-
declare function useSidebarWidth(storageKey: string): {
|
|
623
|
+
declare function useSidebarWidth(storageKey: string, defaultWidth?: number): {
|
|
622
624
|
width: number;
|
|
623
625
|
collapsed: boolean;
|
|
624
626
|
setCollapsed: (value: boolean) => void;
|
|
625
627
|
resetWidth: () => void;
|
|
626
628
|
startResize: (event: PointerEvent<HTMLDivElement>) => void;
|
|
629
|
+
resizeBy: (delta: number) => void;
|
|
627
630
|
};
|
|
628
631
|
|
|
629
632
|
declare function cn(...inputs: ClassValue[]): string;
|
|
@@ -857,6 +860,8 @@ interface SuiteAppLayoutProps {
|
|
|
857
860
|
lockMainScroll?: boolean;
|
|
858
861
|
/** Drag this to resize the sidebar. */
|
|
859
862
|
onStartResize?: (e: PointerEvent<HTMLDivElement>) => void;
|
|
863
|
+
/** Keyboard equivalent for the resize handle. */
|
|
864
|
+
onResizeBy?: (delta: number) => void;
|
|
860
865
|
/** Double-click to reset sidebar width. */
|
|
861
866
|
onResetWidth?: () => void;
|
|
862
867
|
className?: string;
|
|
@@ -866,6 +871,6 @@ interface SuiteAppLayoutProps {
|
|
|
866
871
|
* one `#main-content` landmark. Desktop: fixed sidebar + scrollable main.
|
|
867
872
|
* Mobile: header + main + bottom nav.
|
|
868
873
|
*/
|
|
869
|
-
declare function SuiteAppLayout({ sidebar, children, mobileHeader, bottomNav, sidebarWidth, collapsed, lockMainScroll, onStartResize, onResetWidth, className, }: SuiteAppLayoutProps): react.JSX.Element;
|
|
874
|
+
declare function SuiteAppLayout({ sidebar, children, mobileHeader, bottomNav, sidebarWidth, collapsed, lockMainScroll, onStartResize, onResizeBy, onResetWidth, className, }: SuiteAppLayoutProps): react.JSX.Element;
|
|
870
875
|
|
|
871
876
|
export { APP_ACCENTS, APP_GLYPHS, AnimatedMoon, AnimatedSun, AppSwitcher, AppSwitcherChevron, AppSwitcherMark, CommandPaletteHost, DeferredChrome, SIDEBAR_COLLAPSE_THRESHOLD, SIDEBAR_DEFAULT_WIDTH, SIDEBAR_MAX_WIDTH, SIDEBAR_MIN_EXPANDED_WIDTH, SIDEBAR_RAIL_WIDTH, SUITE_APPS, SUITE_APP_MAP, SUITE_GLYPHS, SUITE_ICON_NAMES, SUITE_OPEN_ASK_AI_EVENT, SUITE_SPRINGS, SourceAppGlyph, type SuiteAccentSlug, type SuiteAiChatMessage, SuiteAiPanel, type SuiteAiPreset, type SuiteAppAccent, type SuiteAppDefinition, type SuiteAppEntry, SuiteAppIcon, type SuiteAppIconProps, SuiteAppLayout, type SuiteAppLayoutProps, type SuiteAppSlug, SuiteAppStrip, type SuiteAskAiOpenDetail, SuiteBottomNav, type SuiteBottomNavItem, SuiteBreadcrumbs, type SuiteBreadcrumbsProps, type SuiteCommandItem, type SuiteCommandPaletteComponent, type SuiteDropdownItemComponent, type SuiteDropdownMenuComponent, type SuiteDropdownMenuProps, SuiteEmptyState, type SuiteGlyph, type SuiteGlyphElement, SuiteIcon, type SuiteIconName, type SuiteIconProps, SuiteMobileDrawer, SuiteMobileHeader, SuiteMotionProvider, type SuiteNotification, SuiteNotificationBell, type SuiteNotificationsResponse, SuitePage, SuitePageHeader, type SuitePageWidth, type SuiteResolvedTheme, SuiteSectionHeader, SuiteSettingsLayout, type SuiteSettingsLayoutProps, SuiteSettingsMobileNav, type SuiteSettingsNavItem, SuiteSidebar, type SuiteSidebarNavItem, SuiteSkeleton, SuiteSkeletonCard, SuiteSkeletonList, type SuiteSpinnerComponent, type SuiteSpringName, SuiteTabList, type SuiteTheme, type SuiteThemeConfig, type SuiteThemeContextValue, SuiteThemeProvider, SuiteToolbar, SuiteUserMenu, type SuiteUserMenuProps, TodayAskAiCard, TodayCalibrating, TodayEmptyAction, TodayEmptyState, TodayHero, TodayLayout, TodayPageFrame, TodayPanel, type TodayPrimaryAccent, TodayPrimaryAction, TodaySection, TodayTimeIcon, TodayTopBar, appSwitcherMarkClass, appSwitcherMenuItemClass, appSwitcherTriggerClass, cn, getTodayGreeting, openSuiteAskAi, resolveSuiteNotificationHref, sourceToSuiteApp, suiteAppBaseUrl, suiteAppLabel, useIdleMount, useSidebarWidth, useSuiteTheme };
|