@xenide-io/the-old-ui-theme 0.4.4 → 0.4.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (76) hide show
  1. package/dist/{chunk-54ZR4VL5.mjs → chunk-RZXHZWUB.mjs} +44 -17
  2. package/dist/{index-B5NOyoKS.d.mts → index-Od4pIP4F.d.mts} +7 -1
  3. package/dist/{index-B5NOyoKS.d.ts → index-Od4pIP4F.d.ts} +7 -1
  4. package/dist/index.d.mts +2 -2
  5. package/dist/index.d.ts +2 -2
  6. package/dist/index.js +37 -10
  7. package/dist/index.mjs +1 -1
  8. package/dist/suite.d.mts +152 -41
  9. package/dist/suite.d.ts +152 -41
  10. package/dist/suite.js +1366 -671
  11. package/dist/suite.mjs +1304 -610
  12. package/dist/ui.d.mts +1 -1
  13. package/dist/ui.d.ts +1 -1
  14. package/dist/ui.js +37 -10
  15. package/dist/ui.mjs +1 -1
  16. package/package.json +7 -3
  17. package/src/components/ui/Modal.tsx +70 -26
  18. package/src/styles/suite-skin.css +284 -24
  19. package/src/suite/components/ai-panel.test.ts +20 -0
  20. package/src/suite/components/ai-panel.tsx +494 -103
  21. package/src/suite/components/suite-app-layout.tsx +48 -28
  22. package/src/suite/components/suite-layout.tsx +84 -40
  23. package/src/suite/components/suite-mobile-drawer.tsx +35 -22
  24. package/src/suite/components/suite-notification-bell.tsx +9 -3
  25. package/src/suite/components/suite-settings-layout.tsx +82 -0
  26. package/src/suite/components/suite-settings-mobile-nav.tsx +18 -17
  27. package/src/suite/components/suite-skeleton.tsx +3 -3
  28. package/src/suite/components/today-calibrating.tsx +11 -35
  29. package/src/suite/components/today-page-frame.tsx +19 -11
  30. package/src/suite/components/today-ui.tsx +276 -19
  31. package/src/suite/index.ts +41 -25
  32. package/src/suite/lib/apps.ts +32 -2
  33. package/src/suite/lib/use-sidebar-width.ts +114 -0
  34. package/src/components/sections/AccordionShowcase.tsx +0 -45
  35. package/src/components/sections/AlertShowcase.tsx +0 -40
  36. package/src/components/sections/AvatarShowcase.tsx +0 -80
  37. package/src/components/sections/BadgeShowcase.tsx +0 -65
  38. package/src/components/sections/ButtonShowcase.tsx +0 -308
  39. package/src/components/sections/CalendarShowcase.tsx +0 -35
  40. package/src/components/sections/CardShowcase.tsx +0 -159
  41. package/src/components/sections/CodeMockupShowcase.tsx +0 -56
  42. package/src/components/sections/ColorPalette.tsx +0 -117
  43. package/src/components/sections/CommandPaletteShowcase.tsx +0 -48
  44. package/src/components/sections/CountdownShowcase.tsx +0 -43
  45. package/src/components/sections/DiffShowcase.tsx +0 -70
  46. package/src/components/sections/DrawerShowcase.tsx +0 -97
  47. package/src/components/sections/DropdownShowcase.tsx +0 -98
  48. package/src/components/sections/EmptyStateShowcase.tsx +0 -50
  49. package/src/components/sections/FilterChipsShowcase.tsx +0 -98
  50. package/src/components/sections/FormShowcase.tsx +0 -127
  51. package/src/components/sections/HoverCardShowcase.tsx +0 -50
  52. package/src/components/sections/IconShowcase.tsx +0 -121
  53. package/src/components/sections/IndicatorShowcase.tsx +0 -52
  54. package/src/components/sections/KbdShowcase.tsx +0 -57
  55. package/src/components/sections/ModalShowcase.tsx +0 -211
  56. package/src/components/sections/NavigationShowcase.tsx +0 -199
  57. package/src/components/sections/NewComponentsShowcase.tsx +0 -1052
  58. package/src/components/sections/ProductLayoutsShowcase.tsx +0 -78
  59. package/src/components/sections/ProgressShowcase.tsx +0 -82
  60. package/src/components/sections/QuillChartShowcase.tsx +0 -92
  61. package/src/components/sections/QuillDashboardShowcase.tsx +0 -149
  62. package/src/components/sections/SegmentedControlShowcase.tsx +0 -49
  63. package/src/components/sections/SetupThemeShowcase.tsx +0 -262
  64. package/src/components/sections/SidebarShowcase.tsx +0 -152
  65. package/src/components/sections/StackShowcase.tsx +0 -33
  66. package/src/components/sections/StepperShowcase.tsx +0 -37
  67. package/src/components/sections/SuiteShowcase.tsx +0 -669
  68. package/src/components/sections/SwapShowcase.tsx +0 -99
  69. package/src/components/sections/TabShowcase.tsx +0 -84
  70. package/src/components/sections/TableShowcase.tsx +0 -142
  71. package/src/components/sections/TimelineShowcase.tsx +0 -83
  72. package/src/components/sections/ToastShowcase.tsx +0 -108
  73. package/src/components/sections/TooltipShowcase.tsx +0 -38
  74. package/src/components/sections/UtilityShowcase.tsx +0 -81
  75. package/src/styles/excel-themes.css +0 -110
  76. package/src/styles/lemon-primitives.css +0 -550
package/dist/ui.d.mts CHANGED
@@ -1,3 +1,3 @@
1
- export { A as Accordion, a as Alert, b as AlertDialog, c as AlertDialogProps, d as AlertProps, e as AlertStatus, f as AppLayout, g as AppLayoutProps, h as AuthCard, i as AuthCardProps, j as AuthDivider, k as AuthDividerProps, l as AuthLayout, m as AuthLayoutProps, n as Autocomplete, o as AutocompleteOption, p as AutocompleteProps, q as Avatar, r as AvatarGroup, s as AvatarGroupProps, t as AvatarProps, u as AvatarSize, v as AvatarStatus, B as Badge, w as BadgeProps, x as BadgeSize, y as BadgeVariant, z as Banner, C as BannerProps, D as BannerType, E as BreadcrumbItem, F as Breadcrumbs, G as BreadcrumbsProps, H as Button, I as ButtonChrome, J as ButtonChromeProps, K as ButtonGroup, L as ButtonGroupProps, M as ButtonProps, N as ButtonShape, O as ButtonSize, P as ButtonVariant, R as Calendar, S as CanonicalIconName, T as Caption, U as Card, V as CardProps, W as CardVariant, X as ChatBubble, Y as ChatBubbleProps, Z as ChatBubbleVariant, _ as Checkbox, $ as CheckboxProps, a0 as Chip, a1 as ChipProps, a2 as CodeBlock, a3 as Collapsible, a4 as CollapsibleProps, a5 as CollapsibleSection, a6 as Combobox, a7 as ComboboxOption, a8 as ComboboxProps, a9 as CommandPalette, aa as ComponentDocs, ab as ComponentDocsProps, ac as ComponentPropRow, ad as ContextMenu, ae as ContextMenuItem, af as ContextMenuProps, ag as DataTable, ah as DataTableColumn, ai as DataTableProps, aj as DatePicker, ak as DatePickerProps, al as Dialog, am as DialogProps, an as Display, ao as Divider, ap as DividerProps, aq as Dot, ar as DotProps, as as Drawer, at as DrawerProps, au as DrawerSide, av as DrawerSize, aw as DropdownAlign, ax as DropdownButton, ay as DropdownButtonProps, az as DropdownItem, aA as DropdownItemProps, aB as DropdownMenu, aC as DropdownMenuProps, aD as DropdownRadioGroup, aE as DropdownRadioGroupProps, aF as DropdownRadioItem, aG as DropdownRadioItemProps, aH as DropdownSide, aI as EmptyState, aJ as FileUpload, aK as FileUploadProps, aL as FilterBar, aM as FilterBarProps, aN as FilterChip, aO as FilterChips, aP as FilterChipsProps, aQ as FilterControls, aR as FilterControlsProps, aS as FilterMenu, aT as FilterMenuOption, aU as FilterMenuProps, aV as FormField, aW as FormFieldControlProps, aX as FormFieldProps, aY as H1, aZ as H2, a_ as H3, a$ as H4, b0 as H5, b1 as HoverCard, b7 as Icon, b3 as IconAliasName, bc as IconByName, bN as IconName, bU as IconProps, cj as Indicator, ck as IndicatorPosition, cl as IndicatorProps, cm as Input, cn as InputGroup, co as InputGroupProps, cp as InputProps, cq as InputSize, cr as InputVariant, cs as Kbd, ct as KbdPlatform, cu as KbdProps, cv as KbdVariant, cw as Label, cx as Lead, cy as Lettermark, cz as LettermarkProps, cA as Link, cB as LinkProps, cC as Loader, cD as LoaderProps, cE as LoaderSize, cF as LoaderVariant, cG as LoadingBar, cH as LoadingBarProps, cI as LoadingState, cJ as LoadingStateProps, cK as Menubar, cL as MenubarItem, cM as MenubarProps, cN as Metric, cO as MetricProps, cP as Modal, cQ as ModalProps, cR as ModalSize, cS as Mono, cT as NumberField, cU as NumberFieldProps, cW as Overline, cX as P, c_ as Pagination, c$ as PaginationProps, d0 as Panel, d1 as PanelProps, d2 as Popover, d3 as PopoverProps, d4 as Progress, d5 as ProgressCircle, d6 as ProgressCircleProps, d7 as ProgressProps, d8 as Radio, d9 as RadioProps, da as Range, db as RangeProps, dc as Rating, dd as RatingProps, de as Resizable, df as ResizableProps, dg as Row, dh as RowProps, di as ScrollArea, dj as ScrollAreaProps, dk as SearchGroup, dl as SearchGroupProps, dm as SearchInput, dn as SearchInputProps, dp as SegmentedControl, dq as Select, dr as SelectProps, ds as SettingsLayout, dt as SettingsLayoutProps, du as SettingsNav, dv as SettingsNavGroup, dw as SettingsNavItem, dx as SettingsNavProps, dy as ShowcaseWrapper, dz as Sidebar, dA as SidebarGroup, dB as SidebarItemDef, dC as SidebarProps, dD as Skeleton, dE as SkeletonProps, dF as SkeletonShape, dG as Small, dH as Snack, dI as SnackProps, dJ as SortMenu, dK as SortMenuProps, dL as Spinner, dM as SpinnerProps, dN as Splotch, dO as SplotchColor, dP as SplotchProps, dQ as Stat, dR as StatProps, dS as StatTone, dT as Stepper, dU as TabItem, dV as Table, dW as TableColumn, dX as TableProps, dY as Tabs, dZ as TabsProps, d_ as TabsVariant, d$ as Tag, e0 as TagProps, e1 as TagType, e2 as Terminal, e3 as TerminalProps, e4 as Textarea, e5 as TextareaProps, e6 as ThemeDomSync, e7 as ThemeManager, e8 as ThemeManagerProps, e9 as ThemeSwitcher, ea as ThemeSwitcherProps, eb as Timeline, ec as TimelineEvent, ed as TimelineProps, ee as Toast, ef as ToastProps, eg as ToastStack, eh as ToastStackProps, ei as ToastStatus, ej as Toggle, ek as ToggleButton, el as ToggleButtonProps, em as ToggleGroup, en as ToggleGroupProps, eo as ToggleProps, ep as Tooltip, eq as TooltipAlign, er as TooltipProps, es as TooltipProvider, et as TooltipProviderProps, eu as TooltipSide, ev as Widget, ew as WidgetProps } from './index-B5NOyoKS.mjs';
1
+ export { A as Accordion, a as Alert, b as AlertDialog, c as AlertDialogProps, d as AlertProps, e as AlertStatus, f as AppLayout, g as AppLayoutProps, h as AuthCard, i as AuthCardProps, j as AuthDivider, k as AuthDividerProps, l as AuthLayout, m as AuthLayoutProps, n as Autocomplete, o as AutocompleteOption, p as AutocompleteProps, q as Avatar, r as AvatarGroup, s as AvatarGroupProps, t as AvatarProps, u as AvatarSize, v as AvatarStatus, B as Badge, w as BadgeProps, x as BadgeSize, y as BadgeVariant, z as Banner, C as BannerProps, D as BannerType, E as BreadcrumbItem, F as Breadcrumbs, G as BreadcrumbsProps, H as Button, I as ButtonChrome, J as ButtonChromeProps, K as ButtonGroup, L as ButtonGroupProps, M as ButtonProps, N as ButtonShape, O as ButtonSize, P as ButtonVariant, R as Calendar, S as CanonicalIconName, T as Caption, U as Card, V as CardProps, W as CardVariant, X as ChatBubble, Y as ChatBubbleProps, Z as ChatBubbleVariant, _ as Checkbox, $ as CheckboxProps, a0 as Chip, a1 as ChipProps, a2 as CodeBlock, a3 as Collapsible, a4 as CollapsibleProps, a5 as CollapsibleSection, a6 as Combobox, a7 as ComboboxOption, a8 as ComboboxProps, a9 as CommandPalette, aa as ComponentDocs, ab as ComponentDocsProps, ac as ComponentPropRow, ad as ContextMenu, ae as ContextMenuItem, af as ContextMenuProps, ag as DataTable, ah as DataTableColumn, ai as DataTableProps, aj as DatePicker, ak as DatePickerProps, al as Dialog, am as DialogProps, an as Display, ao as Divider, ap as DividerProps, aq as Dot, ar as DotProps, as as Drawer, at as DrawerProps, au as DrawerSide, av as DrawerSize, aw as DropdownAlign, ax as DropdownButton, ay as DropdownButtonProps, az as DropdownItem, aA as DropdownItemProps, aB as DropdownMenu, aC as DropdownMenuProps, aD as DropdownRadioGroup, aE as DropdownRadioGroupProps, aF as DropdownRadioItem, aG as DropdownRadioItemProps, aH as DropdownSide, aI as EmptyState, aJ as FileUpload, aK as FileUploadProps, aL as FilterBar, aM as FilterBarProps, aN as FilterChip, aO as FilterChips, aP as FilterChipsProps, aQ as FilterControls, aR as FilterControlsProps, aS as FilterMenu, aT as FilterMenuOption, aU as FilterMenuProps, aV as FormField, aW as FormFieldControlProps, aX as FormFieldProps, aY as H1, aZ as H2, a_ as H3, a$ as H4, b0 as H5, b1 as HoverCard, b7 as Icon, b3 as IconAliasName, bc as IconByName, bN as IconName, bU as IconProps, cj as Indicator, ck as IndicatorPosition, cl as IndicatorProps, cm as Input, cn as InputGroup, co as InputGroupProps, cp as InputProps, cq as InputSize, cr as InputVariant, cs as Kbd, ct as KbdPlatform, cu as KbdProps, cv as KbdVariant, cw as Label, cx as Lead, cy as Lettermark, cz as LettermarkProps, cA as Link, cB as LinkProps, cC as Loader, cD as LoaderProps, cE as LoaderSize, cF as LoaderVariant, cG as LoadingBar, cH as LoadingBarProps, cI as LoadingState, cJ as LoadingStateProps, cK as Menubar, cL as MenubarItem, cM as MenubarProps, cN as Metric, cO as MetricProps, cP as Modal, cQ as ModalProps, cR as ModalSize, cS as Mono, cT as NumberField, cU as NumberFieldProps, cW as Overline, cX as P, c_ as Pagination, c$ as PaginationProps, d0 as Panel, d1 as PanelProps, d2 as Popover, d3 as PopoverProps, d4 as Progress, d5 as ProgressCircle, d6 as ProgressCircleProps, d7 as ProgressProps, d8 as Radio, d9 as RadioProps, da as Range, db as RangeProps, dc as Rating, dd as RatingProps, de as Resizable, df as ResizableProps, dg as Row, dh as RowProps, di as ScrollArea, dj as ScrollAreaProps, dk as SearchGroup, dl as SearchGroupProps, dm as SearchInput, dn as SearchInputProps, dp as SegmentedControl, dq as Select, dr as SelectProps, ds as SettingsLayout, dt as SettingsLayoutProps, du as SettingsNav, dv as SettingsNavGroup, dw as SettingsNavItem, dx as SettingsNavProps, dy as ShowcaseWrapper, dz as Sidebar, dA as SidebarGroup, dB as SidebarItemDef, dC as SidebarProps, dD as Skeleton, dE as SkeletonProps, dF as SkeletonShape, dG as Small, dH as Snack, dI as SnackProps, dJ as SortMenu, dK as SortMenuProps, dL as Spinner, dM as SpinnerProps, dN as Splotch, dO as SplotchColor, dP as SplotchProps, dQ as Stat, dR as StatProps, dS as StatTone, dT as Stepper, dU as TabItem, dV as Table, dW as TableColumn, dX as TableProps, dY as Tabs, dZ as TabsProps, d_ as TabsVariant, d$ as Tag, e0 as TagProps, e1 as TagType, e2 as Terminal, e3 as TerminalProps, e4 as Textarea, e5 as TextareaProps, e6 as ThemeDomSync, e7 as ThemeManager, e8 as ThemeManagerProps, e9 as ThemeSwitcher, ea as ThemeSwitcherProps, eb as Timeline, ec as TimelineEvent, ed as TimelineProps, ee as Toast, ef as ToastProps, eg as ToastStack, eh as ToastStackProps, ei as ToastStatus, ej as Toggle, ek as ToggleButton, el as ToggleButtonProps, em as ToggleGroup, en as ToggleGroupProps, eo as ToggleProps, ep as Tooltip, eq as TooltipAlign, er as TooltipProps, es as TooltipProvider, et as TooltipProviderProps, eu as TooltipSide, ev as Widget, ew as WidgetProps } from './index-Od4pIP4F.mjs';
2
2
  import 'react';
3
3
  import '@radix-ui/react-dropdown-menu';
package/dist/ui.d.ts CHANGED
@@ -1,3 +1,3 @@
1
- export { A as Accordion, a as Alert, b as AlertDialog, c as AlertDialogProps, d as AlertProps, e as AlertStatus, f as AppLayout, g as AppLayoutProps, h as AuthCard, i as AuthCardProps, j as AuthDivider, k as AuthDividerProps, l as AuthLayout, m as AuthLayoutProps, n as Autocomplete, o as AutocompleteOption, p as AutocompleteProps, q as Avatar, r as AvatarGroup, s as AvatarGroupProps, t as AvatarProps, u as AvatarSize, v as AvatarStatus, B as Badge, w as BadgeProps, x as BadgeSize, y as BadgeVariant, z as Banner, C as BannerProps, D as BannerType, E as BreadcrumbItem, F as Breadcrumbs, G as BreadcrumbsProps, H as Button, I as ButtonChrome, J as ButtonChromeProps, K as ButtonGroup, L as ButtonGroupProps, M as ButtonProps, N as ButtonShape, O as ButtonSize, P as ButtonVariant, R as Calendar, S as CanonicalIconName, T as Caption, U as Card, V as CardProps, W as CardVariant, X as ChatBubble, Y as ChatBubbleProps, Z as ChatBubbleVariant, _ as Checkbox, $ as CheckboxProps, a0 as Chip, a1 as ChipProps, a2 as CodeBlock, a3 as Collapsible, a4 as CollapsibleProps, a5 as CollapsibleSection, a6 as Combobox, a7 as ComboboxOption, a8 as ComboboxProps, a9 as CommandPalette, aa as ComponentDocs, ab as ComponentDocsProps, ac as ComponentPropRow, ad as ContextMenu, ae as ContextMenuItem, af as ContextMenuProps, ag as DataTable, ah as DataTableColumn, ai as DataTableProps, aj as DatePicker, ak as DatePickerProps, al as Dialog, am as DialogProps, an as Display, ao as Divider, ap as DividerProps, aq as Dot, ar as DotProps, as as Drawer, at as DrawerProps, au as DrawerSide, av as DrawerSize, aw as DropdownAlign, ax as DropdownButton, ay as DropdownButtonProps, az as DropdownItem, aA as DropdownItemProps, aB as DropdownMenu, aC as DropdownMenuProps, aD as DropdownRadioGroup, aE as DropdownRadioGroupProps, aF as DropdownRadioItem, aG as DropdownRadioItemProps, aH as DropdownSide, aI as EmptyState, aJ as FileUpload, aK as FileUploadProps, aL as FilterBar, aM as FilterBarProps, aN as FilterChip, aO as FilterChips, aP as FilterChipsProps, aQ as FilterControls, aR as FilterControlsProps, aS as FilterMenu, aT as FilterMenuOption, aU as FilterMenuProps, aV as FormField, aW as FormFieldControlProps, aX as FormFieldProps, aY as H1, aZ as H2, a_ as H3, a$ as H4, b0 as H5, b1 as HoverCard, b7 as Icon, b3 as IconAliasName, bc as IconByName, bN as IconName, bU as IconProps, cj as Indicator, ck as IndicatorPosition, cl as IndicatorProps, cm as Input, cn as InputGroup, co as InputGroupProps, cp as InputProps, cq as InputSize, cr as InputVariant, cs as Kbd, ct as KbdPlatform, cu as KbdProps, cv as KbdVariant, cw as Label, cx as Lead, cy as Lettermark, cz as LettermarkProps, cA as Link, cB as LinkProps, cC as Loader, cD as LoaderProps, cE as LoaderSize, cF as LoaderVariant, cG as LoadingBar, cH as LoadingBarProps, cI as LoadingState, cJ as LoadingStateProps, cK as Menubar, cL as MenubarItem, cM as MenubarProps, cN as Metric, cO as MetricProps, cP as Modal, cQ as ModalProps, cR as ModalSize, cS as Mono, cT as NumberField, cU as NumberFieldProps, cW as Overline, cX as P, c_ as Pagination, c$ as PaginationProps, d0 as Panel, d1 as PanelProps, d2 as Popover, d3 as PopoverProps, d4 as Progress, d5 as ProgressCircle, d6 as ProgressCircleProps, d7 as ProgressProps, d8 as Radio, d9 as RadioProps, da as Range, db as RangeProps, dc as Rating, dd as RatingProps, de as Resizable, df as ResizableProps, dg as Row, dh as RowProps, di as ScrollArea, dj as ScrollAreaProps, dk as SearchGroup, dl as SearchGroupProps, dm as SearchInput, dn as SearchInputProps, dp as SegmentedControl, dq as Select, dr as SelectProps, ds as SettingsLayout, dt as SettingsLayoutProps, du as SettingsNav, dv as SettingsNavGroup, dw as SettingsNavItem, dx as SettingsNavProps, dy as ShowcaseWrapper, dz as Sidebar, dA as SidebarGroup, dB as SidebarItemDef, dC as SidebarProps, dD as Skeleton, dE as SkeletonProps, dF as SkeletonShape, dG as Small, dH as Snack, dI as SnackProps, dJ as SortMenu, dK as SortMenuProps, dL as Spinner, dM as SpinnerProps, dN as Splotch, dO as SplotchColor, dP as SplotchProps, dQ as Stat, dR as StatProps, dS as StatTone, dT as Stepper, dU as TabItem, dV as Table, dW as TableColumn, dX as TableProps, dY as Tabs, dZ as TabsProps, d_ as TabsVariant, d$ as Tag, e0 as TagProps, e1 as TagType, e2 as Terminal, e3 as TerminalProps, e4 as Textarea, e5 as TextareaProps, e6 as ThemeDomSync, e7 as ThemeManager, e8 as ThemeManagerProps, e9 as ThemeSwitcher, ea as ThemeSwitcherProps, eb as Timeline, ec as TimelineEvent, ed as TimelineProps, ee as Toast, ef as ToastProps, eg as ToastStack, eh as ToastStackProps, ei as ToastStatus, ej as Toggle, ek as ToggleButton, el as ToggleButtonProps, em as ToggleGroup, en as ToggleGroupProps, eo as ToggleProps, ep as Tooltip, eq as TooltipAlign, er as TooltipProps, es as TooltipProvider, et as TooltipProviderProps, eu as TooltipSide, ev as Widget, ew as WidgetProps } from './index-B5NOyoKS.js';
1
+ export { A as Accordion, a as Alert, b as AlertDialog, c as AlertDialogProps, d as AlertProps, e as AlertStatus, f as AppLayout, g as AppLayoutProps, h as AuthCard, i as AuthCardProps, j as AuthDivider, k as AuthDividerProps, l as AuthLayout, m as AuthLayoutProps, n as Autocomplete, o as AutocompleteOption, p as AutocompleteProps, q as Avatar, r as AvatarGroup, s as AvatarGroupProps, t as AvatarProps, u as AvatarSize, v as AvatarStatus, B as Badge, w as BadgeProps, x as BadgeSize, y as BadgeVariant, z as Banner, C as BannerProps, D as BannerType, E as BreadcrumbItem, F as Breadcrumbs, G as BreadcrumbsProps, H as Button, I as ButtonChrome, J as ButtonChromeProps, K as ButtonGroup, L as ButtonGroupProps, M as ButtonProps, N as ButtonShape, O as ButtonSize, P as ButtonVariant, R as Calendar, S as CanonicalIconName, T as Caption, U as Card, V as CardProps, W as CardVariant, X as ChatBubble, Y as ChatBubbleProps, Z as ChatBubbleVariant, _ as Checkbox, $ as CheckboxProps, a0 as Chip, a1 as ChipProps, a2 as CodeBlock, a3 as Collapsible, a4 as CollapsibleProps, a5 as CollapsibleSection, a6 as Combobox, a7 as ComboboxOption, a8 as ComboboxProps, a9 as CommandPalette, aa as ComponentDocs, ab as ComponentDocsProps, ac as ComponentPropRow, ad as ContextMenu, ae as ContextMenuItem, af as ContextMenuProps, ag as DataTable, ah as DataTableColumn, ai as DataTableProps, aj as DatePicker, ak as DatePickerProps, al as Dialog, am as DialogProps, an as Display, ao as Divider, ap as DividerProps, aq as Dot, ar as DotProps, as as Drawer, at as DrawerProps, au as DrawerSide, av as DrawerSize, aw as DropdownAlign, ax as DropdownButton, ay as DropdownButtonProps, az as DropdownItem, aA as DropdownItemProps, aB as DropdownMenu, aC as DropdownMenuProps, aD as DropdownRadioGroup, aE as DropdownRadioGroupProps, aF as DropdownRadioItem, aG as DropdownRadioItemProps, aH as DropdownSide, aI as EmptyState, aJ as FileUpload, aK as FileUploadProps, aL as FilterBar, aM as FilterBarProps, aN as FilterChip, aO as FilterChips, aP as FilterChipsProps, aQ as FilterControls, aR as FilterControlsProps, aS as FilterMenu, aT as FilterMenuOption, aU as FilterMenuProps, aV as FormField, aW as FormFieldControlProps, aX as FormFieldProps, aY as H1, aZ as H2, a_ as H3, a$ as H4, b0 as H5, b1 as HoverCard, b7 as Icon, b3 as IconAliasName, bc as IconByName, bN as IconName, bU as IconProps, cj as Indicator, ck as IndicatorPosition, cl as IndicatorProps, cm as Input, cn as InputGroup, co as InputGroupProps, cp as InputProps, cq as InputSize, cr as InputVariant, cs as Kbd, ct as KbdPlatform, cu as KbdProps, cv as KbdVariant, cw as Label, cx as Lead, cy as Lettermark, cz as LettermarkProps, cA as Link, cB as LinkProps, cC as Loader, cD as LoaderProps, cE as LoaderSize, cF as LoaderVariant, cG as LoadingBar, cH as LoadingBarProps, cI as LoadingState, cJ as LoadingStateProps, cK as Menubar, cL as MenubarItem, cM as MenubarProps, cN as Metric, cO as MetricProps, cP as Modal, cQ as ModalProps, cR as ModalSize, cS as Mono, cT as NumberField, cU as NumberFieldProps, cW as Overline, cX as P, c_ as Pagination, c$ as PaginationProps, d0 as Panel, d1 as PanelProps, d2 as Popover, d3 as PopoverProps, d4 as Progress, d5 as ProgressCircle, d6 as ProgressCircleProps, d7 as ProgressProps, d8 as Radio, d9 as RadioProps, da as Range, db as RangeProps, dc as Rating, dd as RatingProps, de as Resizable, df as ResizableProps, dg as Row, dh as RowProps, di as ScrollArea, dj as ScrollAreaProps, dk as SearchGroup, dl as SearchGroupProps, dm as SearchInput, dn as SearchInputProps, dp as SegmentedControl, dq as Select, dr as SelectProps, ds as SettingsLayout, dt as SettingsLayoutProps, du as SettingsNav, dv as SettingsNavGroup, dw as SettingsNavItem, dx as SettingsNavProps, dy as ShowcaseWrapper, dz as Sidebar, dA as SidebarGroup, dB as SidebarItemDef, dC as SidebarProps, dD as Skeleton, dE as SkeletonProps, dF as SkeletonShape, dG as Small, dH as Snack, dI as SnackProps, dJ as SortMenu, dK as SortMenuProps, dL as Spinner, dM as SpinnerProps, dN as Splotch, dO as SplotchColor, dP as SplotchProps, dQ as Stat, dR as StatProps, dS as StatTone, dT as Stepper, dU as TabItem, dV as Table, dW as TableColumn, dX as TableProps, dY as Tabs, dZ as TabsProps, d_ as TabsVariant, d$ as Tag, e0 as TagProps, e1 as TagType, e2 as Terminal, e3 as TerminalProps, e4 as Textarea, e5 as TextareaProps, e6 as ThemeDomSync, e7 as ThemeManager, e8 as ThemeManagerProps, e9 as ThemeSwitcher, ea as ThemeSwitcherProps, eb as Timeline, ec as TimelineEvent, ed as TimelineProps, ee as Toast, ef as ToastProps, eg as ToastStack, eh as ToastStackProps, ei as ToastStatus, ej as Toggle, ek as ToggleButton, el as ToggleButtonProps, em as ToggleGroup, en as ToggleGroupProps, eo as ToggleProps, ep as Tooltip, eq as TooltipAlign, er as TooltipProps, es as TooltipProvider, et as TooltipProviderProps, eu as TooltipSide, ev as Widget, ew as WidgetProps } from './index-Od4pIP4F.js';
2
2
  import 'react';
3
3
  import '@radix-ui/react-dropdown-menu';
package/dist/ui.js CHANGED
@@ -1945,10 +1945,16 @@ function Modal({
1945
1945
  footer,
1946
1946
  size = "md",
1947
1947
  className,
1948
+ customLayout = false,
1948
1949
  showCloseButton = true,
1949
1950
  closeOnOutsideClick = true,
1950
1951
  closeOnEscape = true,
1951
- "aria-label": ariaLabel
1952
+ dataTest,
1953
+ panelDataTest,
1954
+ zIndex,
1955
+ id,
1956
+ "aria-label": ariaLabel,
1957
+ "aria-labelledby": ariaLabelledBy
1952
1958
  }) {
1953
1959
  const canDismiss = Boolean(onClose);
1954
1960
  const restoreFocusRef = (0, import_react11.useRef)(null);
@@ -1960,13 +1966,23 @@ function Modal({
1960
1966
  if (!nextOpen) onClose == null ? void 0 : onClose();
1961
1967
  },
1962
1968
  children: /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(Dialog.Portal, { children: [
1963
- /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(Dialog.Overlay, { className: "ph-modal-overlay" }),
1964
- /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(
1969
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
1970
+ Dialog.Overlay,
1971
+ {
1972
+ "data-test": dataTest,
1973
+ className: "ph-modal-overlay",
1974
+ style: zIndex ? { zIndex } : void 0
1975
+ }
1976
+ ),
1977
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
1965
1978
  Dialog.Content,
1966
- __spreadProps(__spreadValues({
1967
- className: cn("ph-modal-panel", sizeMap4[size], className),
1968
- "aria-label": ariaLabel
1969
- }, description ? {} : { "aria-describedby": void 0 }), {
1979
+ __spreadProps(__spreadValues(__spreadProps(__spreadValues(__spreadValues({
1980
+ id,
1981
+ "data-test": panelDataTest,
1982
+ className: cn("ph-modal-panel", sizeMap4[size], className)
1983
+ }, ariaLabel ? { "aria-label": ariaLabel } : {}), ariaLabelledBy ? { "aria-labelledby": ariaLabelledBy } : {}), {
1984
+ style: zIndex ? { zIndex } : void 0
1985
+ }), description ? {} : { "aria-describedby": void 0 }), {
1970
1986
  onOpenAutoFocus: () => {
1971
1987
  restoreFocusRef.current = document.activeElement instanceof HTMLElement ? document.activeElement : null;
1972
1988
  },
@@ -1981,18 +1997,29 @@ function Modal({
1981
1997
  onPointerDownOutside: (event) => {
1982
1998
  if (!canDismiss || !closeOnOutsideClick) event.preventDefault();
1983
1999
  },
1984
- children: [
2000
+ children: customLayout ? /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(import_jsx_runtime17.Fragment, { children: [
2001
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(Dialog.Title, { className: "sr-only", children: ariaLabel != null ? ariaLabel : "Dialog" }),
2002
+ children
2003
+ ] }) : /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(import_jsx_runtime17.Fragment, { children: [
1985
2004
  title ? null : /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(Dialog.Title, { className: "sr-only", children: ariaLabel != null ? ariaLabel : "Dialog" }),
1986
2005
  title || description || showCloseButton && canDismiss ? /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("header", { className: "ph-modal-header", children: [
1987
2006
  /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { className: "min-w-0", children: [
1988
2007
  title ? /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(Dialog.Title, { className: "text-lg font-bold text-ph-ink", children: title }) : null,
1989
2008
  description ? /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(Dialog.Description, { className: "mt-1 text-sm text-ph-subtle", children: description }) : null
1990
2009
  ] }),
1991
- showCloseButton && canDismiss ? /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(Dialog.Close, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("button", { type: "button", className: "ph-modal-close", "aria-label": "Close dialog", children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(IconClose, { className: "h-5 w-5", "aria-hidden": true }) }) }) : null
2010
+ showCloseButton && canDismiss ? /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(Dialog.Close, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
2011
+ "button",
2012
+ {
2013
+ type: "button",
2014
+ className: "ph-modal-close",
2015
+ "aria-label": "Close dialog",
2016
+ children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(IconClose, { className: "h-5 w-5", "aria-hidden": true })
2017
+ }
2018
+ ) }) : null
1992
2019
  ] }) : null,
1993
2020
  /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("div", { className: "ph-modal-body", children }),
1994
2021
  footer ? /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("div", { className: "ph-modal-footer", children: footer }) : null
1995
- ]
2022
+ ] })
1996
2023
  })
1997
2024
  )
1998
2025
  ] })
package/dist/ui.mjs CHANGED
@@ -108,7 +108,7 @@ import {
108
108
  ToggleButton,
109
109
  ToggleGroup,
110
110
  Widget
111
- } from "./chunk-54ZR4VL5.mjs";
111
+ } from "./chunk-RZXHZWUB.mjs";
112
112
  import {
113
113
  ButtonChrome,
114
114
  DropdownButton,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xenide-io/the-old-ui-theme",
3
- "version": "0.4.4",
3
+ "version": "0.4.8",
4
4
  "description": "Props-driven React components and theme tokens inspired by classic interface design — optimized for Next.js apps and internal tools.",
5
5
  "author": "Xenide",
6
6
  "license": "MIT",
@@ -58,9 +58,13 @@
58
58
  "files": [
59
59
  "dist",
60
60
  "src/app/globals.css",
61
- "src/components",
61
+ "src/components/ui",
62
+ "src/components/charts",
63
+ "src/components/icons",
62
64
  "src/suite",
63
- "src/styles",
65
+ "src/styles/themes.css",
66
+ "src/styles/typography.css",
67
+ "src/styles/suite-skin.css",
64
68
  "tailwind-preset.ts"
65
69
  ],
66
70
  "scripts": {
@@ -16,10 +16,16 @@ export interface ModalProps {
16
16
  footer?: ReactNode;
17
17
  size?: ModalSize;
18
18
  className?: string;
19
+ customLayout?: boolean;
19
20
  showCloseButton?: boolean;
20
21
  closeOnOutsideClick?: boolean;
21
22
  closeOnEscape?: boolean;
23
+ dataTest?: string;
24
+ panelDataTest?: string;
25
+ zIndex?: number;
26
+ id?: string;
22
27
  "aria-label"?: string;
28
+ "aria-labelledby"?: string;
23
29
  }
24
30
 
25
31
  const sizeMap: Record<ModalSize, string> = {
@@ -39,10 +45,16 @@ export function Modal({
39
45
  footer,
40
46
  size = "md",
41
47
  className,
48
+ customLayout = false,
42
49
  showCloseButton = true,
43
50
  closeOnOutsideClick = true,
44
51
  closeOnEscape = true,
52
+ dataTest,
53
+ panelDataTest,
54
+ zIndex,
55
+ id,
45
56
  "aria-label": ariaLabel,
57
+ "aria-labelledby": ariaLabelledBy,
46
58
  }: ModalProps) {
47
59
  const canDismiss = Boolean(onClose);
48
60
  const restoreFocusRef = useRef<HTMLElement | null>(null);
@@ -55,15 +67,24 @@ export function Modal({
55
67
  }}
56
68
  >
57
69
  <Dialog.Portal>
58
- <Dialog.Overlay className="ph-modal-overlay" />
70
+ <Dialog.Overlay
71
+ data-test={dataTest}
72
+ className="ph-modal-overlay"
73
+ style={zIndex ? { zIndex } : undefined}
74
+ />
59
75
  <Dialog.Content
76
+ id={id}
77
+ data-test={panelDataTest}
60
78
  className={cn("ph-modal-panel", sizeMap[size], className)}
61
- aria-label={ariaLabel}
79
+ {...(ariaLabel ? { "aria-label": ariaLabel } : {})}
80
+ {...(ariaLabelledBy ? { "aria-labelledby": ariaLabelledBy } : {})}
81
+ style={zIndex ? { zIndex } : undefined}
62
82
  {...(description ? {} : { "aria-describedby": undefined })}
63
83
  onOpenAutoFocus={() => {
64
- restoreFocusRef.current = document.activeElement instanceof HTMLElement
65
- ? document.activeElement
66
- : null;
84
+ restoreFocusRef.current =
85
+ document.activeElement instanceof HTMLElement
86
+ ? document.activeElement
87
+ : null;
67
88
  }}
68
89
  onCloseAutoFocus={(event) => {
69
90
  event.preventDefault();
@@ -76,28 +97,51 @@ export function Modal({
76
97
  if (!canDismiss || !closeOnOutsideClick) event.preventDefault();
77
98
  }}
78
99
  >
79
- {title ? null : <Dialog.Title className="sr-only">{ariaLabel ?? "Dialog"}</Dialog.Title>}
80
- {(title || description || (showCloseButton && canDismiss)) ? (
81
- <header className="ph-modal-header">
82
- <div className="min-w-0">
83
- {title ? <Dialog.Title className="text-lg font-bold text-ph-ink">{title}</Dialog.Title> : null}
84
- {description ? (
85
- <Dialog.Description className="mt-1 text-sm text-ph-subtle">
86
- {description}
87
- </Dialog.Description>
88
- ) : null}
89
- </div>
90
- {showCloseButton && canDismiss ? (
91
- <Dialog.Close asChild>
92
- <button type="button" className="ph-modal-close" aria-label="Close dialog">
93
- <IconClose className="h-5 w-5" aria-hidden />
94
- </button>
95
- </Dialog.Close>
100
+ {customLayout ? (
101
+ <>
102
+ <Dialog.Title className="sr-only">
103
+ {ariaLabel ?? "Dialog"}
104
+ </Dialog.Title>
105
+ {children}
106
+ </>
107
+ ) : (
108
+ <>
109
+ {title ? null : (
110
+ <Dialog.Title className="sr-only">
111
+ {ariaLabel ?? "Dialog"}
112
+ </Dialog.Title>
113
+ )}
114
+ {title || description || (showCloseButton && canDismiss) ? (
115
+ <header className="ph-modal-header">
116
+ <div className="min-w-0">
117
+ {title ? (
118
+ <Dialog.Title className="text-lg font-bold text-ph-ink">
119
+ {title}
120
+ </Dialog.Title>
121
+ ) : null}
122
+ {description ? (
123
+ <Dialog.Description className="mt-1 text-sm text-ph-subtle">
124
+ {description}
125
+ </Dialog.Description>
126
+ ) : null}
127
+ </div>
128
+ {showCloseButton && canDismiss ? (
129
+ <Dialog.Close asChild>
130
+ <button
131
+ type="button"
132
+ className="ph-modal-close"
133
+ aria-label="Close dialog"
134
+ >
135
+ <IconClose className="h-5 w-5" aria-hidden />
136
+ </button>
137
+ </Dialog.Close>
138
+ ) : null}
139
+ </header>
96
140
  ) : null}
97
- </header>
98
- ) : null}
99
- <div className="ph-modal-body">{children}</div>
100
- {footer ? <div className="ph-modal-footer">{footer}</div> : null}
141
+ <div className="ph-modal-body">{children}</div>
142
+ {footer ? <div className="ph-modal-footer">{footer}</div> : null}
143
+ </>
144
+ )}
101
145
  </Dialog.Content>
102
146
  </Dialog.Portal>
103
147
  </Dialog.Root>
@@ -15,6 +15,34 @@ html {
15
15
  -webkit-tap-highlight-color: transparent;
16
16
  /* App-like vertical scrolling: no rubber-band chaining into the page. */
17
17
  overscroll-behavior-y: none;
18
+ /* Spacing scale (4/8/12/16/24/32/48) — Slack / Linear-adjacent. */
19
+ --suite-space-1: 4px;
20
+ --suite-space-2: 8px;
21
+ --suite-space-3: 12px;
22
+ --suite-space-4: 16px;
23
+ --suite-space-5: 24px;
24
+ --suite-space-6: 32px;
25
+ --suite-space-7: 48px;
26
+ --suite-page-pad-x: var(--suite-space-4);
27
+ --suite-page-pad-x-sm: var(--suite-space-5);
28
+ --suite-page-pad-x-lg: var(--suite-space-6);
29
+ --suite-page-pad-y-top: var(--suite-space-2);
30
+ --suite-page-pad-y-top-sm: var(--suite-space-3);
31
+ --suite-page-pad-y-bottom: 20px;
32
+ --suite-page-pad-y-bottom-sm: var(--suite-space-5);
33
+ /* Today needs a calmer opening rhythm than dense workspace screens. */
34
+ --suite-today-pad-y-top: var(--suite-space-4);
35
+ --suite-today-pad-y-top-sm: var(--suite-space-5);
36
+ --suite-section-gap: var(--suite-space-5);
37
+ --suite-header-gap: var(--suite-space-4);
38
+ --suite-content-max: 96rem; /* used only by content/narrow caps, not default pages */
39
+ --suite-reading-max: 48rem; /* ~max-w-3xl / 65ch */
40
+ }
41
+
42
+ @media (min-width: 1536px) {
43
+ html {
44
+ --suite-page-pad-x-lg: var(--suite-space-7);
45
+ }
18
46
  }
19
47
 
20
48
  body {
@@ -23,6 +51,239 @@ body {
23
51
  -webkit-font-smoothing: antialiased;
24
52
  }
25
53
 
54
+ /* Shared page inset — SuitePage + TodayPageFrame (one source of truth). */
55
+ .suite-page-inset {
56
+ padding-left: var(--suite-page-pad-x);
57
+ padding-right: var(--suite-page-pad-x);
58
+ padding-top: var(--suite-page-pad-y-top);
59
+ padding-bottom: var(--suite-page-pad-y-bottom);
60
+ }
61
+ @media (min-width: 640px) {
62
+ .suite-page-inset {
63
+ padding-left: var(--suite-page-pad-x-sm);
64
+ padding-right: var(--suite-page-pad-x-sm);
65
+ padding-top: var(--suite-page-pad-y-top-sm);
66
+ padding-bottom: var(--suite-page-pad-y-bottom-sm);
67
+ }
68
+ }
69
+ @media (min-width: 1024px) {
70
+ .suite-page-inset {
71
+ padding-left: var(--suite-page-pad-x-lg);
72
+ padding-right: var(--suite-page-pad-x-lg);
73
+ }
74
+ }
75
+
76
+ /* Mobile settings tabs bleed to the shared page edge without hard-coded mx/px. */
77
+ .suite-settings-mobile-nav {
78
+ margin-inline: calc(-1 * var(--suite-page-pad-x));
79
+ padding-inline: var(--suite-page-pad-x);
80
+ }
81
+ @media (min-width: 640px) {
82
+ .suite-settings-mobile-nav {
83
+ margin-inline: calc(-1 * var(--suite-page-pad-x-sm));
84
+ padding-inline: var(--suite-page-pad-x-sm);
85
+ }
86
+ }
87
+
88
+ /* Today: extra top inset so the title isn't jammed under the shell. */
89
+ .today-page-frame .suite-page-inset {
90
+ padding-top: var(--suite-today-pad-y-top);
91
+ }
92
+ @media (min-width: 640px) {
93
+ .today-page-frame .suite-page-inset {
94
+ padding-top: var(--suite-today-pad-y-top-sm);
95
+ }
96
+ }
97
+
98
+ /* Today atmosphere — shared geometry, colours supplied by each app theme. */
99
+ .today-page-frame {
100
+ background-color: var(--ph-canvas);
101
+ }
102
+
103
+ .today-page-frame__glow {
104
+ background:
105
+ radial-gradient(
106
+ ellipse 130% 80% at 50% -20%,
107
+ color-mix(in srgb, var(--ph-brand) 28%, transparent),
108
+ transparent 58%
109
+ ),
110
+ radial-gradient(
111
+ ellipse 80% 55% at 100% 0%,
112
+ color-mix(in srgb, var(--ph-accent) 18%, transparent),
113
+ transparent 48%
114
+ ),
115
+ radial-gradient(
116
+ ellipse 70% 50% at 0% 8%,
117
+ color-mix(in srgb, var(--ph-violet, var(--ph-brand)) 20%, transparent),
118
+ transparent 46%
119
+ ),
120
+ radial-gradient(
121
+ ellipse 60% 40% at 70% 35%,
122
+ color-mix(in srgb, var(--ph-brand) 10%, transparent),
123
+ transparent 55%
124
+ );
125
+ }
126
+
127
+ .today-page-frame__top-fade {
128
+ background: linear-gradient(
129
+ to bottom,
130
+ color-mix(in srgb, var(--ph-brand) 18%, var(--ph-canvas)),
131
+ color-mix(in srgb, var(--ph-canvas) 45%, transparent),
132
+ transparent
133
+ );
134
+ }
135
+
136
+ .today-page-frame__cloud {
137
+ background: color-mix(in srgb, var(--ph-surface) 48%, transparent);
138
+ filter: blur(2px);
139
+ }
140
+
141
+ .today-page-frame__cloud--2 {
142
+ background: color-mix(in srgb, var(--ph-brand) 10%, var(--ph-surface));
143
+ }
144
+
145
+ .today-page-frame__cloud--4 {
146
+ background: color-mix(in srgb, var(--ph-accent) 8%, var(--ph-surface));
147
+ opacity: 0.85;
148
+ }
149
+
150
+ .today-page-frame__cloud--5 {
151
+ background: color-mix(in srgb, var(--ph-surface) 36%, transparent);
152
+ opacity: 0.75;
153
+ }
154
+
155
+ html.dark .today-page-frame__cloud {
156
+ background: color-mix(in srgb, var(--ph-surface) 22%, transparent);
157
+ }
158
+
159
+ html.dark .today-page-frame__cloud--2 {
160
+ background: color-mix(in srgb, var(--ph-brand) 8%, var(--ph-surface));
161
+ }
162
+
163
+ /* Today primary action — compact geometry, colour supplied by the app theme. */
164
+ .today-primary-action {
165
+ color: var(--ph-ink);
166
+ background: color-mix(in oklab, var(--ph-brand) 12%, var(--ph-surface));
167
+ border: 1px solid color-mix(in oklab, var(--ph-brand) 28%, var(--ph-border));
168
+ box-shadow: 0 1px 0 color-mix(in oklab, var(--ph-brand) 8%, transparent);
169
+ }
170
+ .today-primary-action:hover {
171
+ background: color-mix(in oklab, var(--ph-brand) 18%, var(--ph-surface));
172
+ border-color: color-mix(in oklab, var(--ph-brand) 40%, var(--ph-border));
173
+ }
174
+ .today-primary-action__icon {
175
+ background: color-mix(in oklab, var(--ph-brand) 22%, var(--ph-surface));
176
+ color: var(--ph-brand);
177
+ }
178
+ .today-primary-action--turtletime {
179
+ background: color-mix(in oklab, #2d6a4f 14%, var(--ph-surface));
180
+ border-color: color-mix(in oklab, #2d6a4f 32%, var(--ph-border));
181
+ }
182
+ .today-primary-action--turtletime .today-primary-action__icon {
183
+ background: color-mix(in oklab, #2d6a4f 24%, var(--ph-surface));
184
+ color: #1b4332;
185
+ }
186
+ .today-primary-action--tides {
187
+ background: color-mix(in oklab, var(--ph-brand) 14%, var(--ph-surface));
188
+ }
189
+ .today-primary-action--kraken {
190
+ background: color-mix(
191
+ in oklab,
192
+ var(--ph-violet, var(--ph-brand)) 14%,
193
+ var(--ph-surface)
194
+ );
195
+ border-color: color-mix(
196
+ in oklab,
197
+ var(--ph-violet, var(--ph-brand)) 32%,
198
+ var(--ph-border)
199
+ );
200
+ }
201
+ .today-primary-action--kraken .today-primary-action__icon {
202
+ background: color-mix(
203
+ in oklab,
204
+ var(--ph-violet, var(--ph-brand)) 22%,
205
+ var(--ph-surface)
206
+ );
207
+ color: var(--ph-violet, var(--ph-brand));
208
+ }
209
+ .today-primary-action--shellstack {
210
+ background: color-mix(in oklab, var(--ph-ink) 6%, var(--ph-surface));
211
+ }
212
+ .today-primary-action--active .today-primary-action__icon {
213
+ background: var(--ph-brand);
214
+ color: var(--ph-canvas);
215
+ }
216
+
217
+ /* Desktop sticky page title chrome (SuitePageHeader sticky). */
218
+ .suite-page-header-sticky {
219
+ position: sticky;
220
+ top: 0;
221
+ z-index: 20;
222
+ margin-left: calc(-1 * var(--suite-page-pad-x));
223
+ margin-right: calc(-1 * var(--suite-page-pad-x));
224
+ padding-left: var(--suite-page-pad-x);
225
+ padding-right: var(--suite-page-pad-x);
226
+ background: color-mix(in oklab, var(--ph-canvas) 88%, transparent);
227
+ -webkit-backdrop-filter: blur(12px) saturate(1.4);
228
+ backdrop-filter: blur(12px) saturate(1.4);
229
+ border-bottom: 1px solid transparent;
230
+ transition: border-color 160ms ease;
231
+ }
232
+ @media (min-width: 640px) {
233
+ .suite-page-header-sticky {
234
+ margin-left: calc(-1 * var(--suite-page-pad-x-sm));
235
+ margin-right: calc(-1 * var(--suite-page-pad-x-sm));
236
+ padding-left: var(--suite-page-pad-x-sm);
237
+ padding-right: var(--suite-page-pad-x-sm);
238
+ }
239
+ }
240
+ @media (min-width: 1024px) {
241
+ .suite-page-header-sticky {
242
+ margin-left: calc(-1 * var(--suite-page-pad-x-lg));
243
+ margin-right: calc(-1 * var(--suite-page-pad-x-lg));
244
+ padding-left: var(--suite-page-pad-x-lg);
245
+ padding-right: var(--suite-page-pad-x-lg);
246
+ }
247
+ }
248
+ .suite-page-header-sticky[data-stuck="true"] {
249
+ border-bottom-color: var(--ph-border-subtle);
250
+ /* Only when pinned under the scroll edge — keeps resting titles aligned. */
251
+ padding-top: var(--suite-space-2);
252
+ }
253
+ @supports not (backdrop-filter: blur(1px)) {
254
+ .suite-page-header-sticky {
255
+ background: var(--ph-canvas);
256
+ }
257
+ }
258
+
259
+ /* Page stage — ONE layout standard for every suite app.
260
+ - Default width="full": use the full main column (no max-width centring)
261
+ - Always use suite-page-inset for title baseline (top + left)
262
+ - Never nest SuitePage inside SuitePage
263
+ - width="content" | "narrow" | "reading" only when a page truly needs a
264
+ reading measure (e.g. Ask). "wide" is an alias of full. */
265
+ .suite-page-stage {
266
+ width: 100%;
267
+ max-width: var(--suite-page-max, none);
268
+ margin-inline: auto;
269
+ }
270
+ .suite-page-stage[data-width="full"],
271
+ .suite-page-stage[data-width="wide"] {
272
+ --suite-page-max: none;
273
+ }
274
+ .suite-page-stage[data-width="content"] {
275
+ --suite-page-max: 72rem; /* ~max-w-6xl */
276
+ }
277
+ .suite-page-stage[data-width="narrow"] {
278
+ --suite-page-max: 56rem; /* ~max-w-4xl */
279
+ }
280
+ .suite-page-stage[data-width="reading"] {
281
+ --suite-page-max: var(--suite-reading-max);
282
+ }
283
+ .suite-reading-measure {
284
+ max-width: var(--suite-reading-max);
285
+ }
286
+
26
287
  /* ── Cards ──────────────────────────────────────────────────────────────
27
288
  The MASTER spec: 12px radius, resting elevation, hover lift, and a
28
289
  visible press state. Shadows are mixed from the theme's text colour
@@ -125,7 +386,7 @@ button:hover > .ph-card {
125
386
  will-change: transform;
126
387
  }
127
388
  .suite-bottom-nav__indicator::before {
128
- content: '';
389
+ content: "";
129
390
  position: absolute;
130
391
  inset: 0 5px;
131
392
  border-radius: 0.9rem;
@@ -138,22 +399,17 @@ button:hover > .ph-card {
138
399
  color: var(--ph-accent);
139
400
  }
140
401
 
141
- /* ── Today hero: one-shot typography entrance ───────────────────────────
142
- Rises and settles when the greeting text arrives (keyed by message).
143
- Runs once per message change — never loops, so no battery cost. */
402
+ /* ── Today hero: short one-shot fade ────────────────────────────────────
403
+ Keep the entrance calm Slack-like briefing, not a marketing hero. */
144
404
  .today-hero {
145
- animation: today-hero-enter 560ms cubic-bezier(0.22, 1, 0.36, 1) both;
405
+ animation: today-hero-enter 220ms ease-out both;
146
406
  }
147
407
  @keyframes today-hero-enter {
148
408
  from {
149
409
  opacity: 0;
150
- transform: translateY(10px);
151
- letter-spacing: 0.01em;
152
410
  }
153
411
  to {
154
412
  opacity: 1;
155
- transform: translateY(0);
156
- letter-spacing: normal;
157
413
  }
158
414
  }
159
415
  @media (prefers-reduced-motion: reduce) {
@@ -162,20 +418,6 @@ button:hover > .ph-card {
162
418
  }
163
419
  }
164
420
 
165
- /* ── Today frame: mobile perf ───────────────────────────────────────────
166
- blur-3xl + infinite pulse is a GPU/battery hog on phones. Keep the
167
- atmosphere on tablet/desktop; flatten it on small screens. */
168
- @media (max-width: 767px) {
169
- .today-page-frame__sun {
170
- filter: none;
171
- opacity: 0.28;
172
- animation: none;
173
- }
174
- .today-page-frame__cloud {
175
- display: none;
176
- }
177
- }
178
-
179
421
  /* ── Mobile bottom sheets ───────────────────────────────────────────────
180
422
  Below lg, every ph-modal becomes a sheet pinned to the bottom edge —
181
423
  the native phone/tablet pattern (Apple HIG, Material 3). Desktop keeps
@@ -197,7 +439,7 @@ button:hover > .ph-card {
197
439
  }
198
440
  /* Grabber — first in-flow child, so it sits above flush header rows. */
199
441
  .ph-modal-panel::before {
200
- content: '';
442
+ content: "";
201
443
  display: block;
202
444
  flex: none;
203
445
  width: 36px;
@@ -233,6 +475,24 @@ button:hover > .ph-card {
233
475
  -webkit-overflow-scrolling: touch;
234
476
  }
235
477
 
478
+ /* ── Auth / OAuth / launch handoff ──────────────────────────────────────
479
+ One calm opacity fade — no stacked entrance reveals on bridge pages. */
480
+ .suite-auth-handoff {
481
+ opacity: 0;
482
+ animation: suite-auth-handoff-fade 250ms ease-out forwards;
483
+ }
484
+ @keyframes suite-auth-handoff-fade {
485
+ to {
486
+ opacity: 1;
487
+ }
488
+ }
489
+ @media (prefers-reduced-motion: reduce) {
490
+ .suite-auth-handoff {
491
+ opacity: 1;
492
+ animation: none;
493
+ }
494
+ }
495
+
236
496
  /* ── Reduced motion: every skin animation honours it ──────────────────── */
237
497
  @media (prefers-reduced-motion: reduce) {
238
498
  .ph-card,