@xenide-io/the-old-ui-theme 0.9.18 → 0.11.0

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 (79) hide show
  1. package/dist/{Chip-BzuNgJIa.d.mts → Chip-Dw2g2t8D.d.mts} +18 -4
  2. package/dist/{Chip-BzuNgJIa.d.ts → Chip-Dw2g2t8D.d.ts} +18 -4
  3. package/dist/{chunk-6SVJAU5K.mjs → chunk-RIPGN6FG.mjs} +1333 -526
  4. package/dist/index.d.mts +3 -2
  5. package/dist/index.d.ts +3 -2
  6. package/dist/index.js +490 -119
  7. package/dist/index.mjs +11 -3
  8. package/dist/suite-analytics--Mf1RZbw.d.mts +29 -0
  9. package/dist/suite-analytics--Mf1RZbw.d.ts +29 -0
  10. package/dist/suite.d.mts +36 -4
  11. package/dist/suite.d.ts +36 -4
  12. package/dist/suite.js +4617 -4001
  13. package/dist/suite.mjs +1456 -868
  14. package/dist/tailwind-preset.js +10 -1
  15. package/dist/tailwind-preset.mjs +10 -1
  16. package/dist/ui.d.mts +33 -4
  17. package/dist/ui.d.ts +33 -4
  18. package/dist/ui.js +1364 -571
  19. package/dist/ui.mjs +15 -1
  20. package/docs/macos-identity-audit.md +279 -0
  21. package/package.json +1 -1
  22. package/src/app/globals.css +390 -44
  23. package/src/components/ui/Accordion.tsx +4 -7
  24. package/src/components/ui/Avatar.tsx +5 -5
  25. package/src/components/ui/BrandSpinner.tsx +256 -0
  26. package/src/components/ui/Calendar.tsx +7 -7
  27. package/src/components/ui/CodeBlock.tsx +14 -11
  28. package/src/components/ui/CollapsibleSection.tsx +4 -4
  29. package/src/components/ui/CommandPalette.tsx +7 -10
  30. package/src/components/ui/EmptyState.tsx +2 -2
  31. package/src/components/ui/Input.tsx +1 -1
  32. package/src/components/ui/Marketing.tsx +144 -0
  33. package/src/components/ui/MarketingIllustrations.tsx +287 -0
  34. package/src/components/ui/Panel.tsx +1 -1
  35. package/src/components/ui/SegmentedControl.tsx +59 -13
  36. package/src/components/ui/SettingsLayout.tsx +4 -0
  37. package/src/components/ui/ShowcaseWrapper.tsx +3 -3
  38. package/src/components/ui/Table.tsx +45 -10
  39. package/src/components/ui/Typography.tsx +4 -4
  40. package/src/components/ui/avatar-stat.test.tsx +14 -1
  41. package/src/components/ui/brand-spinner.test.tsx +62 -0
  42. package/src/components/ui/index.ts +19 -11
  43. package/src/components/ui/interaction-primitives.test.tsx +12 -6
  44. package/src/components/ui/marketing.test.tsx +39 -0
  45. package/src/components/ui/table.test.tsx +47 -0
  46. package/src/styles/suite-skin.css +471 -74
  47. package/src/styles/themes.css +45 -45
  48. package/src/styles/typography.css +25 -1
  49. package/src/suite/components/ai-draft-editor.tsx +184 -0
  50. package/src/suite/components/ai-panel-workflows.test.tsx +179 -0
  51. package/src/suite/components/ai-panel.tsx +201 -31
  52. package/src/suite/components/app-switcher.tsx +22 -9
  53. package/src/suite/components/command-palette-host.tsx +20 -2
  54. package/src/suite/components/suite-app-layout.tsx +7 -4
  55. package/src/suite/components/suite-bottom-nav.tsx +1 -1
  56. package/src/suite/components/suite-clients-projects-directory.tsx +6 -6
  57. package/src/suite/components/suite-integration-picker.tsx +7 -7
  58. package/src/suite/components/suite-integration-rules.tsx +5 -5
  59. package/src/suite/components/suite-layout.test.tsx +32 -3
  60. package/src/suite/components/suite-layout.tsx +4 -4
  61. package/src/suite/components/suite-mobile-drawer.tsx +2 -2
  62. package/src/suite/components/suite-mobile-header.tsx +1 -1
  63. package/src/suite/components/suite-notification-bell.tsx +27 -6
  64. package/src/suite/components/suite-notification-settings.tsx +182 -0
  65. package/src/suite/components/suite-palette-library.test.tsx +46 -0
  66. package/src/suite/components/suite-palette-library.tsx +82 -15
  67. package/src/suite/components/suite-settings-layout.tsx +2 -2
  68. package/src/suite/components/suite-settings-mobile-nav.tsx +10 -10
  69. package/src/suite/components/suite-sidebar.test.tsx +39 -0
  70. package/src/suite/components/suite-sidebar.tsx +41 -19
  71. package/src/suite/components/suite-skeleton.tsx +6 -6
  72. package/src/suite/components/suite-user-menu.tsx +2 -2
  73. package/src/suite/components/theme-provider.tsx +2 -0
  74. package/src/suite/components/today-calibrating.tsx +3 -3
  75. package/src/suite/components/today-ui.tsx +42 -37
  76. package/src/suite/components/workspace-switcher.tsx +3 -3
  77. package/src/suite/index.ts +14 -0
  78. package/src/suite/lib/suite-notifications.tsx +5 -0
  79. package/tailwind-preset.ts +9 -0
package/dist/index.mjs CHANGED
@@ -8,6 +8,7 @@ import {
8
8
  Avatar,
9
9
  AvatarGroup,
10
10
  Badge,
11
+ BrandSpinner,
11
12
  Button,
12
13
  ButtonChrome,
13
14
  CANONICAL_ICONS,
@@ -131,6 +132,7 @@ import {
131
132
  Panel,
132
133
  Progress,
133
134
  Radio,
135
+ SUITE_ANALYTICS_EVENT,
134
136
  SearchInput,
135
137
  SectionTitle,
136
138
  SegmentedControl,
@@ -157,8 +159,10 @@ import {
157
159
  getTheme,
158
160
  isThemeId,
159
161
  persistTheme,
160
- readStoredTheme
161
- } from "./chunk-6SVJAU5K.mjs";
162
+ readStoredTheme,
163
+ subscribeSuiteAnalytics,
164
+ trackSuiteEvent
165
+ } from "./chunk-RIPGN6FG.mjs";
162
166
  import "./chunk-FWCSY2DS.mjs";
163
167
  export {
164
168
  Accordion,
@@ -169,6 +173,7 @@ export {
169
173
  Avatar,
170
174
  AvatarGroup,
171
175
  Badge,
176
+ BrandSpinner,
172
177
  Button,
173
178
  ButtonChrome,
174
179
  CANONICAL_ICONS,
@@ -293,6 +298,7 @@ export {
293
298
  Panel,
294
299
  Progress,
295
300
  Radio,
301
+ SUITE_ANALYTICS_EVENT,
296
302
  SearchInput,
297
303
  SectionTitle,
298
304
  SegmentedControl,
@@ -319,5 +325,7 @@ export {
319
325
  getTheme,
320
326
  isThemeId,
321
327
  persistTheme,
322
- readStoredTheme
328
+ readStoredTheme,
329
+ subscribeSuiteAnalytics,
330
+ trackSuiteEvent
323
331
  };
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Analytics bridge for shared `the-old-ui` components.
3
+ *
4
+ * The shared package must not depend on `@xenide-io/suite-client`, so instead
5
+ * of importing an analytics client it emits a browser CustomEvent that each
6
+ * host app forwards to its own client (e.g. `analytics.capture`). This mirrors
7
+ * the existing `suite-mutated` / `tt-timer-mutated` window-event pattern and
8
+ * works across the package's separate `index` / `ui` / `suite` bundles because
9
+ * `window` is the single shared instance.
10
+ */
11
+ /** Window event apps subscribe to in order to forward suite analytics. */
12
+ declare const SUITE_ANALYTICS_EVENT = "shellstack:analytics";
13
+ type SuiteAnalyticsProperties = Record<string, unknown>;
14
+ interface SuiteAnalyticsEventDetail {
15
+ event: string;
16
+ properties?: SuiteAnalyticsProperties;
17
+ }
18
+ /**
19
+ * Emit a shared-component analytics event. Safe to call during SSR and never
20
+ * throws into the UI: analytics must never break an interaction.
21
+ */
22
+ declare function trackSuiteEvent(event: string, properties?: SuiteAnalyticsProperties): void;
23
+ /**
24
+ * Subscribe to suite analytics emitted by shared components. Returns an
25
+ * unsubscribe function. Host apps wire this once in their analytics provider.
26
+ */
27
+ declare function subscribeSuiteAnalytics(handler: (event: string, properties?: SuiteAnalyticsProperties) => void): () => void;
28
+
29
+ export { SUITE_ANALYTICS_EVENT as S, type SuiteAnalyticsEventDetail as a, type SuiteAnalyticsProperties as b, subscribeSuiteAnalytics as s, trackSuiteEvent as t };
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Analytics bridge for shared `the-old-ui` components.
3
+ *
4
+ * The shared package must not depend on `@xenide-io/suite-client`, so instead
5
+ * of importing an analytics client it emits a browser CustomEvent that each
6
+ * host app forwards to its own client (e.g. `analytics.capture`). This mirrors
7
+ * the existing `suite-mutated` / `tt-timer-mutated` window-event pattern and
8
+ * works across the package's separate `index` / `ui` / `suite` bundles because
9
+ * `window` is the single shared instance.
10
+ */
11
+ /** Window event apps subscribe to in order to forward suite analytics. */
12
+ declare const SUITE_ANALYTICS_EVENT = "shellstack:analytics";
13
+ type SuiteAnalyticsProperties = Record<string, unknown>;
14
+ interface SuiteAnalyticsEventDetail {
15
+ event: string;
16
+ properties?: SuiteAnalyticsProperties;
17
+ }
18
+ /**
19
+ * Emit a shared-component analytics event. Safe to call during SSR and never
20
+ * throws into the UI: analytics must never break an interaction.
21
+ */
22
+ declare function trackSuiteEvent(event: string, properties?: SuiteAnalyticsProperties): void;
23
+ /**
24
+ * Subscribe to suite analytics emitted by shared components. Returns an
25
+ * unsubscribe function. Host apps wire this once in their analytics provider.
26
+ */
27
+ declare function subscribeSuiteAnalytics(handler: (event: string, properties?: SuiteAnalyticsProperties) => void): () => void;
28
+
29
+ export { SUITE_ANALYTICS_EVENT as S, type SuiteAnalyticsEventDetail as a, type SuiteAnalyticsProperties as b, subscribeSuiteAnalytics as s, trackSuiteEvent as t };
package/dist/suite.d.mts CHANGED
@@ -2,6 +2,7 @@ import * as react from 'react';
2
2
  import { ReactNode, ComponentType, ButtonHTMLAttributes, CSSProperties, PointerEvent, ElementType } from 'react';
3
3
  export { S as SuiteResolvedTheme, a as SuiteTheme, b as SuiteThemeBootOptions, c as SuiteThemeConfig, d as SuiteThemeContextValue, e as SuiteThemeProvider, s as suiteThemeBootScript, u as useSuiteTheme } from './theme-boot-P-oqKVZF.mjs';
4
4
  import { ClassValue } from 'clsx';
5
+ export { S as SUITE_ANALYTICS_EVENT, a as SuiteAnalyticsEventDetail, b as SuiteAnalyticsProperties, s as subscribeSuiteAnalytics, t as trackSuiteEvent } from './suite-analytics--Mf1RZbw.mjs';
5
6
  export { m } from 'motion/react';
6
7
 
7
8
  /**
@@ -51,11 +52,12 @@ declare function getTodayGreeting(user?: {
51
52
  overdueCount?: number;
52
53
  hours?: number;
53
54
  }): string;
54
- declare function TodayHero({ message, brief, briefMeta, }: {
55
+ declare function TodayHero({ message, brief, briefMeta, action, }: {
55
56
  message?: ReactNode;
56
57
  /** AI / local focus brief under the greeting. */
57
58
  brief?: ReactNode;
58
59
  briefMeta?: ReactNode;
60
+ action?: ReactNode;
59
61
  }): react.JSX.Element;
60
62
  type TodayPrimaryAccent = "tides" | "turtletime" | "kraken" | "shellstack" | "neutral";
61
63
  /**
@@ -83,7 +85,7 @@ declare function TodayEmptyAction({ title, description, actionLabel, href, onCli
83
85
  onClick?: () => void;
84
86
  dataTest?: string;
85
87
  }): react.JSX.Element;
86
- /** Desktop Today shell: main column + sticky Ask AI / brief aside. */
88
+ /** Daily work queue and contextual rail; both stay in the page's scroll flow. */
87
89
  declare function TodayLayout({ primary, main, aside, className, }: {
88
90
  primary?: ReactNode;
89
91
  main: ReactNode;
@@ -268,6 +270,28 @@ declare function SuiteNotificationBell({ dropdownMenu: DropdownMenu, dataTest, t
268
270
  triggerDataTest?: string;
269
271
  }): react.JSX.Element;
270
272
 
273
+ type SuiteWebPushState = "unsupported" | "unconfigured" | "default" | "granted" | "denied" | "subscribed";
274
+ /** Structural contract matching `createWebPushClient` from @xenide-io/suite-client. */
275
+ interface SuiteWebPushController {
276
+ supported(): boolean;
277
+ getState(): Promise<SuiteWebPushState>;
278
+ enable(): Promise<void>;
279
+ disable(): Promise<void>;
280
+ }
281
+ interface SuiteNotificationSettingsProps {
282
+ controller: SuiteWebPushController;
283
+ title?: string;
284
+ description?: string;
285
+ dataTest?: string;
286
+ className?: string;
287
+ }
288
+ /**
289
+ * Settings card that lets a user enable or disable browser notifications for
290
+ * this device. State and delivery live in the app's suite-client web push
291
+ * controller; this component is presentational.
292
+ */
293
+ declare function SuiteNotificationSettings({ controller, title, description, dataTest, className, }: SuiteNotificationSettingsProps): react.JSX.Element;
294
+
271
295
  /**
272
296
  * Cmd/Ctrl+K command palette host. Apps build the item list and inject the
273
297
  * theme CommandPalette primitive.
@@ -567,13 +591,21 @@ declare function SuiteAiPanel({ presets, emptyState, title, fetchChat, sendMessa
567
591
  onSwitchApp?: (app: SuiteAppSlug, path: string) => void;
568
592
  /** Client-side same-app route change — keeps Shelly mounted. */
569
593
  onSameAppNavigate?: (path: string) => void;
570
- resolveAction?: (id: string, decision: "confirm" | "cancel") => Promise<{
594
+ resolveAction?: (id: string, decision: "confirm" | "cancel", edits?: Record<string, unknown>) => Promise<{
571
595
  messages: SuiteAiChatMessage[];
572
596
  }>;
573
597
  /** A durable background job is still preparing the assistant reply. */
574
598
  isWaitingForReply?: boolean;
575
599
  }): react.JSX.Element | null;
576
600
 
601
+ declare function suiteAiDraftFields(kind: string, payload?: Record<string, unknown>): Record<string, unknown> | null;
602
+ declare function SuiteAiDraftEditor({ kind, draft, canAddTasks, onChange, }: {
603
+ kind: string;
604
+ draft: Record<string, unknown>;
605
+ canAddTasks: boolean;
606
+ onChange: (draft: Record<string, unknown>) => void;
607
+ }): react.JSX.Element;
608
+
577
609
  interface SuiteWorkspaceEntry {
578
610
  id: string;
579
611
  name: string;
@@ -1266,4 +1298,4 @@ declare function findPaletteIcons(options: {
1266
1298
  results: PaletteHit[];
1267
1299
  }>;
1268
1300
 
1269
- export { APP_ACCENTS, APP_GLYPHS, AnimatedMoon, AnimatedSun, AppSwitcher, AppSwitcherChevron, AppSwitcherMark, CommandPaletteHost, DeferredChrome, type PaletteCollection, type PaletteCollectionDetail, type PaletteHit, type PaletteIcon, type PaletteLibrary, SIDEBAR_COLLAPSE_THRESHOLD, SIDEBAR_DEFAULT_WIDTH, SIDEBAR_MAX_WIDTH, SIDEBAR_MIN_EXPANDED_WIDTH, SIDEBAR_RAIL_WIDTH, SUITE_APPS, SUITE_APP_MAP, SUITE_ASK_AI_OPEN_KEY, SUITE_ASK_AI_OPEN_QUERY, SUITE_GLYPHS, SUITE_ICON_NAMES, SUITE_MUTATED_EVENT, SUITE_NOTIFICATIONS_POLL_MS, SUITE_OPEN_ASK_AI_EVENT, SUITE_SIDEBAR_WIDTH_COOKIE, SUITE_SIDEBAR_WIDTH_KEY, SUITE_SPRINGS, SUITE_THEME_COOKIE, SourceAppGlyph, type SuiteAccentSlug, type SuiteAiAction, type SuiteAiActionStatus, type SuiteAiChatMessage, SuiteAiPanel, type SuiteAiPreset, type SuiteAppAccent, type SuiteAppDefinition, type SuiteAppEntry, SuiteAppIcon, type SuiteAppIconProps, SuiteAppLayout, type SuiteAppLayoutProps, type SuiteAppSelectOptions, type SuiteAppSlug, SuiteAppStrip, type SuiteAskAiOpenDetail, SuiteBottomNav, type SuiteBottomNavItem, SuiteBreadcrumbs, type SuiteBreadcrumbsProps, SuiteClientsProjectsDirectory, type SuiteClientsProjectsDirectoryProps, type SuiteCommandItem, type SuiteCommandPaletteComponent, type SuiteDirectoryClient, type SuiteDirectoryFields, type SuiteDirectoryProject, type SuiteDirectoryProjectFields, type SuiteDropdownItemComponent, type SuiteDropdownMenuComponent, type SuiteDropdownMenuProps, SuiteEmptyState, SuiteEntityIcon, type SuiteGlyph, type SuiteGlyphElement, type SuiteHrefTarget, SuiteIcon, type SuiteIconName, type SuiteIconProps, type SuiteIntegrationEvent, SuiteIntegrationPicker, type SuiteIntegrationPickerItem, type SuiteIntegrationPickerProps, type SuiteIntegrationRule, type SuiteIntegrationRuleActionType, type SuiteIntegrationRuleInput, type SuiteIntegrationRuleProject, SuiteIntegrationRules, type SuiteIntegrationRulesProps, SuiteMobileDrawer, SuiteMobileHeader, SuiteMotionProvider, type SuiteNotification, SuiteNotificationBell, type SuiteNotificationsContextValue, SuiteNotificationsProvider, type SuiteNotificationsResponse, SuitePage, SuitePageHeader, type SuitePageWidth, SuitePaletteLibrary, type SuitePalettePick, SuiteSectionHeader, SuiteSettingsLayout, type SuiteSettingsLayoutProps, SuiteSettingsMobileNav, type SuiteSettingsNavItem, SuiteSidebar, type SuiteSidebarNavItem, SuiteSkeleton, SuiteSkeletonCard, SuiteSkeletonList, type SuiteSpinnerComponent, type SuiteSpringName, SuiteTabList, SuiteToolbar, SuiteUserMenu, type SuiteUserMenuProps, type SuiteWorkspaceEntry, type SuiteWorkspaceGroup, SuiteWorkspaceSwitcher, TURTLETIME_TIMER_MUTATED_EVENT, TodayAskAiCard, TodayCalibrating, TodayEmptyAction, TodayEmptyState, TodayHero, TodayLayout, TodayPageFrame, TodayPanel, type TodayPrimaryAccent, TodayPrimaryAction, TodaySection, TodayTimeIcon, TodayTopBar, appSwitcherMarkClass, appSwitcherMenuItemClass, appSwitcherTriggerClass, classifySuiteHref, cn, consumePendingAskAiPrompt, consumeSuiteAskAiOpenFromLocation, fetchPaletteCollection, fetchPaletteLibrary, findPaletteIcons, getTodayGreeting, openSuiteAskAi, pathWithSuiteAskAiOpen, persistSidebarWidth, persistSuiteAskAiOpen, readSidebarWidth, readSuiteAskAiOpen, resetSuiteSidebarWidth, resolveSuiteNotificationHref, sidebarColumnWidth, sourceToSuiteApp, suiteAppBaseUrl, suiteAppLabel, useIdleMount, useSidebarWidth, useSuiteNotifications };
1301
+ export { APP_ACCENTS, APP_GLYPHS, AnimatedMoon, AnimatedSun, AppSwitcher, AppSwitcherChevron, AppSwitcherMark, CommandPaletteHost, DeferredChrome, type PaletteCollection, type PaletteCollectionDetail, type PaletteHit, type PaletteIcon, type PaletteLibrary, SIDEBAR_COLLAPSE_THRESHOLD, SIDEBAR_DEFAULT_WIDTH, SIDEBAR_MAX_WIDTH, SIDEBAR_MIN_EXPANDED_WIDTH, SIDEBAR_RAIL_WIDTH, SUITE_APPS, SUITE_APP_MAP, SUITE_ASK_AI_OPEN_KEY, SUITE_ASK_AI_OPEN_QUERY, SUITE_GLYPHS, SUITE_ICON_NAMES, SUITE_MUTATED_EVENT, SUITE_NOTIFICATIONS_POLL_MS, SUITE_OPEN_ASK_AI_EVENT, SUITE_SIDEBAR_WIDTH_COOKIE, SUITE_SIDEBAR_WIDTH_KEY, SUITE_SPRINGS, SUITE_THEME_COOKIE, SourceAppGlyph, type SuiteAccentSlug, type SuiteAiAction, type SuiteAiActionStatus, type SuiteAiChatMessage, SuiteAiDraftEditor, SuiteAiPanel, type SuiteAiPreset, type SuiteAppAccent, type SuiteAppDefinition, type SuiteAppEntry, SuiteAppIcon, type SuiteAppIconProps, SuiteAppLayout, type SuiteAppLayoutProps, type SuiteAppSelectOptions, type SuiteAppSlug, SuiteAppStrip, type SuiteAskAiOpenDetail, SuiteBottomNav, type SuiteBottomNavItem, SuiteBreadcrumbs, type SuiteBreadcrumbsProps, SuiteClientsProjectsDirectory, type SuiteClientsProjectsDirectoryProps, type SuiteCommandItem, type SuiteCommandPaletteComponent, type SuiteDirectoryClient, type SuiteDirectoryFields, type SuiteDirectoryProject, type SuiteDirectoryProjectFields, type SuiteDropdownItemComponent, type SuiteDropdownMenuComponent, type SuiteDropdownMenuProps, SuiteEmptyState, SuiteEntityIcon, type SuiteGlyph, type SuiteGlyphElement, type SuiteHrefTarget, SuiteIcon, type SuiteIconName, type SuiteIconProps, type SuiteIntegrationEvent, SuiteIntegrationPicker, type SuiteIntegrationPickerItem, type SuiteIntegrationPickerProps, type SuiteIntegrationRule, type SuiteIntegrationRuleActionType, type SuiteIntegrationRuleInput, type SuiteIntegrationRuleProject, SuiteIntegrationRules, type SuiteIntegrationRulesProps, SuiteMobileDrawer, SuiteMobileHeader, SuiteMotionProvider, type SuiteNotification, SuiteNotificationBell, SuiteNotificationSettings, type SuiteNotificationSettingsProps, type SuiteNotificationsContextValue, SuiteNotificationsProvider, type SuiteNotificationsResponse, SuitePage, SuitePageHeader, type SuitePageWidth, SuitePaletteLibrary, type SuitePalettePick, SuiteSectionHeader, SuiteSettingsLayout, type SuiteSettingsLayoutProps, SuiteSettingsMobileNav, type SuiteSettingsNavItem, SuiteSidebar, type SuiteSidebarNavItem, SuiteSkeleton, SuiteSkeletonCard, SuiteSkeletonList, type SuiteSpinnerComponent, type SuiteSpringName, SuiteTabList, SuiteToolbar, SuiteUserMenu, type SuiteUserMenuProps, type SuiteWebPushController, type SuiteWebPushState, type SuiteWorkspaceEntry, type SuiteWorkspaceGroup, SuiteWorkspaceSwitcher, TURTLETIME_TIMER_MUTATED_EVENT, TodayAskAiCard, TodayCalibrating, TodayEmptyAction, TodayEmptyState, TodayHero, TodayLayout, TodayPageFrame, TodayPanel, type TodayPrimaryAccent, TodayPrimaryAction, TodaySection, TodayTimeIcon, TodayTopBar, appSwitcherMarkClass, appSwitcherMenuItemClass, appSwitcherTriggerClass, classifySuiteHref, cn, consumePendingAskAiPrompt, consumeSuiteAskAiOpenFromLocation, fetchPaletteCollection, fetchPaletteLibrary, findPaletteIcons, getTodayGreeting, openSuiteAskAi, pathWithSuiteAskAiOpen, persistSidebarWidth, persistSuiteAskAiOpen, readSidebarWidth, readSuiteAskAiOpen, resetSuiteSidebarWidth, resolveSuiteNotificationHref, sidebarColumnWidth, sourceToSuiteApp, suiteAiDraftFields, suiteAppBaseUrl, suiteAppLabel, useIdleMount, useSidebarWidth, useSuiteNotifications };
package/dist/suite.d.ts CHANGED
@@ -2,6 +2,7 @@ import * as react from 'react';
2
2
  import { ReactNode, ComponentType, ButtonHTMLAttributes, CSSProperties, PointerEvent, ElementType } from 'react';
3
3
  export { S as SuiteResolvedTheme, a as SuiteTheme, b as SuiteThemeBootOptions, c as SuiteThemeConfig, d as SuiteThemeContextValue, e as SuiteThemeProvider, s as suiteThemeBootScript, u as useSuiteTheme } from './theme-boot-P-oqKVZF.js';
4
4
  import { ClassValue } from 'clsx';
5
+ export { S as SUITE_ANALYTICS_EVENT, a as SuiteAnalyticsEventDetail, b as SuiteAnalyticsProperties, s as subscribeSuiteAnalytics, t as trackSuiteEvent } from './suite-analytics--Mf1RZbw.js';
5
6
  export { m } from 'motion/react';
6
7
 
7
8
  /**
@@ -51,11 +52,12 @@ declare function getTodayGreeting(user?: {
51
52
  overdueCount?: number;
52
53
  hours?: number;
53
54
  }): string;
54
- declare function TodayHero({ message, brief, briefMeta, }: {
55
+ declare function TodayHero({ message, brief, briefMeta, action, }: {
55
56
  message?: ReactNode;
56
57
  /** AI / local focus brief under the greeting. */
57
58
  brief?: ReactNode;
58
59
  briefMeta?: ReactNode;
60
+ action?: ReactNode;
59
61
  }): react.JSX.Element;
60
62
  type TodayPrimaryAccent = "tides" | "turtletime" | "kraken" | "shellstack" | "neutral";
61
63
  /**
@@ -83,7 +85,7 @@ declare function TodayEmptyAction({ title, description, actionLabel, href, onCli
83
85
  onClick?: () => void;
84
86
  dataTest?: string;
85
87
  }): react.JSX.Element;
86
- /** Desktop Today shell: main column + sticky Ask AI / brief aside. */
88
+ /** Daily work queue and contextual rail; both stay in the page's scroll flow. */
87
89
  declare function TodayLayout({ primary, main, aside, className, }: {
88
90
  primary?: ReactNode;
89
91
  main: ReactNode;
@@ -268,6 +270,28 @@ declare function SuiteNotificationBell({ dropdownMenu: DropdownMenu, dataTest, t
268
270
  triggerDataTest?: string;
269
271
  }): react.JSX.Element;
270
272
 
273
+ type SuiteWebPushState = "unsupported" | "unconfigured" | "default" | "granted" | "denied" | "subscribed";
274
+ /** Structural contract matching `createWebPushClient` from @xenide-io/suite-client. */
275
+ interface SuiteWebPushController {
276
+ supported(): boolean;
277
+ getState(): Promise<SuiteWebPushState>;
278
+ enable(): Promise<void>;
279
+ disable(): Promise<void>;
280
+ }
281
+ interface SuiteNotificationSettingsProps {
282
+ controller: SuiteWebPushController;
283
+ title?: string;
284
+ description?: string;
285
+ dataTest?: string;
286
+ className?: string;
287
+ }
288
+ /**
289
+ * Settings card that lets a user enable or disable browser notifications for
290
+ * this device. State and delivery live in the app's suite-client web push
291
+ * controller; this component is presentational.
292
+ */
293
+ declare function SuiteNotificationSettings({ controller, title, description, dataTest, className, }: SuiteNotificationSettingsProps): react.JSX.Element;
294
+
271
295
  /**
272
296
  * Cmd/Ctrl+K command palette host. Apps build the item list and inject the
273
297
  * theme CommandPalette primitive.
@@ -567,13 +591,21 @@ declare function SuiteAiPanel({ presets, emptyState, title, fetchChat, sendMessa
567
591
  onSwitchApp?: (app: SuiteAppSlug, path: string) => void;
568
592
  /** Client-side same-app route change — keeps Shelly mounted. */
569
593
  onSameAppNavigate?: (path: string) => void;
570
- resolveAction?: (id: string, decision: "confirm" | "cancel") => Promise<{
594
+ resolveAction?: (id: string, decision: "confirm" | "cancel", edits?: Record<string, unknown>) => Promise<{
571
595
  messages: SuiteAiChatMessage[];
572
596
  }>;
573
597
  /** A durable background job is still preparing the assistant reply. */
574
598
  isWaitingForReply?: boolean;
575
599
  }): react.JSX.Element | null;
576
600
 
601
+ declare function suiteAiDraftFields(kind: string, payload?: Record<string, unknown>): Record<string, unknown> | null;
602
+ declare function SuiteAiDraftEditor({ kind, draft, canAddTasks, onChange, }: {
603
+ kind: string;
604
+ draft: Record<string, unknown>;
605
+ canAddTasks: boolean;
606
+ onChange: (draft: Record<string, unknown>) => void;
607
+ }): react.JSX.Element;
608
+
577
609
  interface SuiteWorkspaceEntry {
578
610
  id: string;
579
611
  name: string;
@@ -1266,4 +1298,4 @@ declare function findPaletteIcons(options: {
1266
1298
  results: PaletteHit[];
1267
1299
  }>;
1268
1300
 
1269
- export { APP_ACCENTS, APP_GLYPHS, AnimatedMoon, AnimatedSun, AppSwitcher, AppSwitcherChevron, AppSwitcherMark, CommandPaletteHost, DeferredChrome, type PaletteCollection, type PaletteCollectionDetail, type PaletteHit, type PaletteIcon, type PaletteLibrary, SIDEBAR_COLLAPSE_THRESHOLD, SIDEBAR_DEFAULT_WIDTH, SIDEBAR_MAX_WIDTH, SIDEBAR_MIN_EXPANDED_WIDTH, SIDEBAR_RAIL_WIDTH, SUITE_APPS, SUITE_APP_MAP, SUITE_ASK_AI_OPEN_KEY, SUITE_ASK_AI_OPEN_QUERY, SUITE_GLYPHS, SUITE_ICON_NAMES, SUITE_MUTATED_EVENT, SUITE_NOTIFICATIONS_POLL_MS, SUITE_OPEN_ASK_AI_EVENT, SUITE_SIDEBAR_WIDTH_COOKIE, SUITE_SIDEBAR_WIDTH_KEY, SUITE_SPRINGS, SUITE_THEME_COOKIE, SourceAppGlyph, type SuiteAccentSlug, type SuiteAiAction, type SuiteAiActionStatus, type SuiteAiChatMessage, SuiteAiPanel, type SuiteAiPreset, type SuiteAppAccent, type SuiteAppDefinition, type SuiteAppEntry, SuiteAppIcon, type SuiteAppIconProps, SuiteAppLayout, type SuiteAppLayoutProps, type SuiteAppSelectOptions, type SuiteAppSlug, SuiteAppStrip, type SuiteAskAiOpenDetail, SuiteBottomNav, type SuiteBottomNavItem, SuiteBreadcrumbs, type SuiteBreadcrumbsProps, SuiteClientsProjectsDirectory, type SuiteClientsProjectsDirectoryProps, type SuiteCommandItem, type SuiteCommandPaletteComponent, type SuiteDirectoryClient, type SuiteDirectoryFields, type SuiteDirectoryProject, type SuiteDirectoryProjectFields, type SuiteDropdownItemComponent, type SuiteDropdownMenuComponent, type SuiteDropdownMenuProps, SuiteEmptyState, SuiteEntityIcon, type SuiteGlyph, type SuiteGlyphElement, type SuiteHrefTarget, SuiteIcon, type SuiteIconName, type SuiteIconProps, type SuiteIntegrationEvent, SuiteIntegrationPicker, type SuiteIntegrationPickerItem, type SuiteIntegrationPickerProps, type SuiteIntegrationRule, type SuiteIntegrationRuleActionType, type SuiteIntegrationRuleInput, type SuiteIntegrationRuleProject, SuiteIntegrationRules, type SuiteIntegrationRulesProps, SuiteMobileDrawer, SuiteMobileHeader, SuiteMotionProvider, type SuiteNotification, SuiteNotificationBell, type SuiteNotificationsContextValue, SuiteNotificationsProvider, type SuiteNotificationsResponse, SuitePage, SuitePageHeader, type SuitePageWidth, SuitePaletteLibrary, type SuitePalettePick, SuiteSectionHeader, SuiteSettingsLayout, type SuiteSettingsLayoutProps, SuiteSettingsMobileNav, type SuiteSettingsNavItem, SuiteSidebar, type SuiteSidebarNavItem, SuiteSkeleton, SuiteSkeletonCard, SuiteSkeletonList, type SuiteSpinnerComponent, type SuiteSpringName, SuiteTabList, SuiteToolbar, SuiteUserMenu, type SuiteUserMenuProps, type SuiteWorkspaceEntry, type SuiteWorkspaceGroup, SuiteWorkspaceSwitcher, TURTLETIME_TIMER_MUTATED_EVENT, TodayAskAiCard, TodayCalibrating, TodayEmptyAction, TodayEmptyState, TodayHero, TodayLayout, TodayPageFrame, TodayPanel, type TodayPrimaryAccent, TodayPrimaryAction, TodaySection, TodayTimeIcon, TodayTopBar, appSwitcherMarkClass, appSwitcherMenuItemClass, appSwitcherTriggerClass, classifySuiteHref, cn, consumePendingAskAiPrompt, consumeSuiteAskAiOpenFromLocation, fetchPaletteCollection, fetchPaletteLibrary, findPaletteIcons, getTodayGreeting, openSuiteAskAi, pathWithSuiteAskAiOpen, persistSidebarWidth, persistSuiteAskAiOpen, readSidebarWidth, readSuiteAskAiOpen, resetSuiteSidebarWidth, resolveSuiteNotificationHref, sidebarColumnWidth, sourceToSuiteApp, suiteAppBaseUrl, suiteAppLabel, useIdleMount, useSidebarWidth, useSuiteNotifications };
1301
+ export { APP_ACCENTS, APP_GLYPHS, AnimatedMoon, AnimatedSun, AppSwitcher, AppSwitcherChevron, AppSwitcherMark, CommandPaletteHost, DeferredChrome, type PaletteCollection, type PaletteCollectionDetail, type PaletteHit, type PaletteIcon, type PaletteLibrary, SIDEBAR_COLLAPSE_THRESHOLD, SIDEBAR_DEFAULT_WIDTH, SIDEBAR_MAX_WIDTH, SIDEBAR_MIN_EXPANDED_WIDTH, SIDEBAR_RAIL_WIDTH, SUITE_APPS, SUITE_APP_MAP, SUITE_ASK_AI_OPEN_KEY, SUITE_ASK_AI_OPEN_QUERY, SUITE_GLYPHS, SUITE_ICON_NAMES, SUITE_MUTATED_EVENT, SUITE_NOTIFICATIONS_POLL_MS, SUITE_OPEN_ASK_AI_EVENT, SUITE_SIDEBAR_WIDTH_COOKIE, SUITE_SIDEBAR_WIDTH_KEY, SUITE_SPRINGS, SUITE_THEME_COOKIE, SourceAppGlyph, type SuiteAccentSlug, type SuiteAiAction, type SuiteAiActionStatus, type SuiteAiChatMessage, SuiteAiDraftEditor, SuiteAiPanel, type SuiteAiPreset, type SuiteAppAccent, type SuiteAppDefinition, type SuiteAppEntry, SuiteAppIcon, type SuiteAppIconProps, SuiteAppLayout, type SuiteAppLayoutProps, type SuiteAppSelectOptions, type SuiteAppSlug, SuiteAppStrip, type SuiteAskAiOpenDetail, SuiteBottomNav, type SuiteBottomNavItem, SuiteBreadcrumbs, type SuiteBreadcrumbsProps, SuiteClientsProjectsDirectory, type SuiteClientsProjectsDirectoryProps, type SuiteCommandItem, type SuiteCommandPaletteComponent, type SuiteDirectoryClient, type SuiteDirectoryFields, type SuiteDirectoryProject, type SuiteDirectoryProjectFields, type SuiteDropdownItemComponent, type SuiteDropdownMenuComponent, type SuiteDropdownMenuProps, SuiteEmptyState, SuiteEntityIcon, type SuiteGlyph, type SuiteGlyphElement, type SuiteHrefTarget, SuiteIcon, type SuiteIconName, type SuiteIconProps, type SuiteIntegrationEvent, SuiteIntegrationPicker, type SuiteIntegrationPickerItem, type SuiteIntegrationPickerProps, type SuiteIntegrationRule, type SuiteIntegrationRuleActionType, type SuiteIntegrationRuleInput, type SuiteIntegrationRuleProject, SuiteIntegrationRules, type SuiteIntegrationRulesProps, SuiteMobileDrawer, SuiteMobileHeader, SuiteMotionProvider, type SuiteNotification, SuiteNotificationBell, SuiteNotificationSettings, type SuiteNotificationSettingsProps, type SuiteNotificationsContextValue, SuiteNotificationsProvider, type SuiteNotificationsResponse, SuitePage, SuitePageHeader, type SuitePageWidth, SuitePaletteLibrary, type SuitePalettePick, SuiteSectionHeader, SuiteSettingsLayout, type SuiteSettingsLayoutProps, SuiteSettingsMobileNav, type SuiteSettingsNavItem, SuiteSidebar, type SuiteSidebarNavItem, SuiteSkeleton, SuiteSkeletonCard, SuiteSkeletonList, type SuiteSpinnerComponent, type SuiteSpringName, SuiteTabList, SuiteToolbar, SuiteUserMenu, type SuiteUserMenuProps, type SuiteWebPushController, type SuiteWebPushState, type SuiteWorkspaceEntry, type SuiteWorkspaceGroup, SuiteWorkspaceSwitcher, TURTLETIME_TIMER_MUTATED_EVENT, TodayAskAiCard, TodayCalibrating, TodayEmptyAction, TodayEmptyState, TodayHero, TodayLayout, TodayPageFrame, TodayPanel, type TodayPrimaryAccent, TodayPrimaryAction, TodaySection, TodayTimeIcon, TodayTopBar, appSwitcherMarkClass, appSwitcherMenuItemClass, appSwitcherTriggerClass, classifySuiteHref, cn, consumePendingAskAiPrompt, consumeSuiteAskAiOpenFromLocation, fetchPaletteCollection, fetchPaletteLibrary, findPaletteIcons, getTodayGreeting, openSuiteAskAi, pathWithSuiteAskAiOpen, persistSidebarWidth, persistSuiteAskAiOpen, readSidebarWidth, readSuiteAskAiOpen, resetSuiteSidebarWidth, resolveSuiteNotificationHref, sidebarColumnWidth, sourceToSuiteApp, suiteAiDraftFields, suiteAppBaseUrl, suiteAppLabel, useIdleMount, useSidebarWidth, useSuiteNotifications };