@xenide-io/the-old-ui-theme 0.7.0 → 0.9.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 (109) hide show
  1. package/README.md +9 -10
  2. package/dist/{Chip-Cq3AiAji.d.mts → Chip-BzuNgJIa.d.mts} +81 -23
  3. package/dist/{Chip-Cq3AiAji.d.ts → Chip-BzuNgJIa.d.ts} +81 -23
  4. package/dist/{ai-message-blocknote-WABTHFY7.mjs → ai-message-blocknote-D4Z6DUCJ.mjs} +9 -3
  5. package/dist/chunk-2EO5VCXP.mjs +3912 -0
  6. package/dist/chunk-APKRZQRO.mjs +251 -0
  7. package/dist/chunk-BS7BZI5W.mjs +19 -0
  8. package/dist/chunk-IULORI3A.mjs +8 -0
  9. package/dist/index.d.mts +3 -3
  10. package/dist/index.d.ts +3 -3
  11. package/dist/index.js +997 -576
  12. package/dist/index.mjs +49 -45
  13. package/dist/suite.d.mts +157 -55
  14. package/dist/suite.d.ts +157 -55
  15. package/dist/suite.js +4249 -801
  16. package/dist/suite.mjs +2578 -594
  17. package/dist/theme-boot-P-oqKVZF.d.mts +74 -0
  18. package/dist/theme-boot-P-oqKVZF.d.ts +74 -0
  19. package/dist/theme-boot.d.mts +2 -0
  20. package/dist/theme-boot.d.ts +2 -0
  21. package/dist/theme-boot.js +44 -0
  22. package/dist/theme-boot.mjs +8 -0
  23. package/dist/ui.d.mts +5 -29
  24. package/dist/ui.d.ts +5 -29
  25. package/dist/ui.js +647 -352
  26. package/dist/ui.mjs +10 -12
  27. package/docs/README.md +34 -0
  28. package/docs/ai-quick-reference.md +56 -0
  29. package/docs/component-library-improvement-plan.md +751 -0
  30. package/docs/component-reference.md +81 -0
  31. package/docs/components.md +48 -0
  32. package/docs/demos.md +19 -0
  33. package/docs/installation.md +117 -0
  34. package/docs/suite-audit.md +34 -0
  35. package/docs/theme-token-reference.md +67 -0
  36. package/docs/themes.md +164 -0
  37. package/package.json +22 -21
  38. package/public/fonts/OpenRunde-Bold.woff2 +0 -0
  39. package/public/fonts/OpenRunde-Medium.woff2 +0 -0
  40. package/public/fonts/OpenRunde-Regular.woff2 +0 -0
  41. package/public/fonts/OpenRunde-Semibold.woff2 +0 -0
  42. package/scripts/package-smoke.mjs +43 -0
  43. package/src/app/globals.css +2 -1
  44. package/src/components/ui/Accordion.tsx +20 -6
  45. package/src/components/ui/Avatar.tsx +5 -3
  46. package/src/components/ui/Calendar.tsx +187 -63
  47. package/src/components/ui/Card.test.tsx +38 -0
  48. package/src/components/ui/Card.tsx +77 -14
  49. package/src/components/ui/CollapsibleSection.tsx +12 -4
  50. package/src/components/ui/CommandPalette.test.tsx +91 -4
  51. package/src/components/ui/CommandPalette.tsx +138 -128
  52. package/src/components/ui/EmptyState.tsx +2 -2
  53. package/src/components/ui/FormField.tsx +1 -1
  54. package/src/components/ui/Input.tsx +42 -18
  55. package/src/components/ui/Kbd.tsx +18 -3
  56. package/src/components/ui/Modal.tsx +3 -1
  57. package/src/components/ui/Progress.tsx +14 -5
  58. package/src/components/ui/SegmentedControl.tsx +2 -2
  59. package/src/components/ui/SettingsLayout.tsx +1 -1
  60. package/src/components/ui/Stat.tsx +3 -2
  61. package/src/components/ui/Table.tsx +8 -3
  62. package/src/components/ui/Tooltip.test.tsx +70 -1
  63. package/src/components/ui/Tooltip.tsx +53 -29
  64. package/src/components/ui/Typography.tsx +103 -49
  65. package/src/components/ui/avatar-stat.test.tsx +23 -0
  66. package/src/components/ui/calendar.test.tsx +88 -0
  67. package/src/components/ui/disclosure.test.tsx +39 -0
  68. package/src/components/ui/index.ts +44 -6
  69. package/src/components/ui/progress.test.tsx +15 -0
  70. package/src/components/ui/typography.test.tsx +26 -1
  71. package/src/styles/suite-skin.css +8 -2
  72. package/src/styles/themes.css +184 -68
  73. package/src/suite/components/ai-message-blocknote.tsx +13 -2
  74. package/src/suite/components/ai-panel.tsx +41 -10
  75. package/src/suite/components/app-switcher.test.tsx +21 -6
  76. package/src/suite/components/app-switcher.tsx +7 -11
  77. package/src/suite/components/suite-app-layout.tsx +12 -3
  78. package/src/suite/components/suite-bottom-nav.tsx +0 -1
  79. package/src/suite/components/suite-clients-projects-directory.test.tsx +71 -0
  80. package/src/suite/components/suite-clients-projects-directory.tsx +943 -0
  81. package/src/suite/components/suite-integration-picker.test.tsx +224 -0
  82. package/src/suite/components/suite-integration-picker.tsx +939 -0
  83. package/src/suite/components/suite-integration-rules.test.tsx +157 -0
  84. package/src/suite/components/suite-integration-rules.tsx +471 -0
  85. package/src/suite/components/suite-mobile-drawer.test.tsx +18 -2
  86. package/src/suite/components/suite-mobile-drawer.tsx +65 -98
  87. package/src/suite/components/suite-notification-bell.tsx +29 -4
  88. package/src/suite/components/suite-sidebar.tsx +25 -25
  89. package/src/suite/components/suite-skeleton.tsx +2 -2
  90. package/src/suite/components/suite-user-menu.tsx +9 -8
  91. package/src/suite/components/theme-provider.test.tsx +87 -3
  92. package/src/suite/components/theme-provider.tsx +144 -23
  93. package/src/suite/components/today-ui.tsx +79 -68
  94. package/src/suite/components/workspace-switcher.test.tsx +56 -0
  95. package/src/suite/components/workspace-switcher.tsx +3 -3
  96. package/src/suite/icons/app-accents.ts +12 -12
  97. package/src/suite/icons/glyphs.ts +6 -12
  98. package/src/suite/index.ts +27 -0
  99. package/src/suite/lib/apps.test.ts +9 -1
  100. package/src/suite/lib/apps.ts +14 -8
  101. package/src/suite/lib/cookies.ts +53 -0
  102. package/src/suite/lib/theme-boot.ts +32 -0
  103. package/src/suite/lib/theme-cookie.ts +7 -0
  104. package/src/suite/lib/use-sidebar-width.ts +5 -51
  105. package/dist/chunk-KDR6HI6F.mjs +0 -1075
  106. package/dist/chunk-NOI42JNZ.mjs +0 -151
  107. package/dist/chunk-VXISSXTB.mjs +0 -2564
  108. package/src/suite/lib/use-lock-mobile-page-zoom.test.tsx +0 -65
  109. package/src/suite/lib/use-lock-mobile-page-zoom.ts +0 -51
package/dist/index.mjs CHANGED
@@ -9,6 +9,8 @@ import {
9
9
  AvatarGroup,
10
10
  Badge,
11
11
  Button,
12
+ ButtonChrome,
13
+ CANONICAL_ICONS,
12
14
  Calendar,
13
15
  Caption,
14
16
  Card,
@@ -18,6 +20,11 @@ import {
18
20
  DEFAULT_THEME_ID,
19
21
  Display,
20
22
  Dot,
23
+ DropdownButton,
24
+ DropdownItem,
25
+ DropdownMenu,
26
+ DropdownRadioGroup,
27
+ DropdownRadioItem,
21
28
  EmptyState,
22
29
  FileUpload,
23
30
  FilterBar,
@@ -29,49 +36,6 @@ import {
29
36
  H3,
30
37
  H4,
31
38
  H5,
32
- Input,
33
- Label,
34
- Lead,
35
- Link,
36
- Loader,
37
- LoadingState,
38
- Modal,
39
- Mono,
40
- Overline,
41
- P,
42
- Panel,
43
- Progress,
44
- Radio,
45
- SearchInput,
46
- SectionTitle,
47
- SegmentedControl,
48
- Select,
49
- SettingsLayout,
50
- SettingsNav,
51
- Skeleton,
52
- Small,
53
- SortMenu,
54
- Spinner,
55
- Stat,
56
- THEMES,
57
- THEME_GROUPS,
58
- THEME_INIT_SCRIPT,
59
- Table,
60
- Textarea,
61
- Toggle,
62
- getTheme,
63
- isThemeId,
64
- persistTheme,
65
- readStoredTheme
66
- } from "./chunk-VXISSXTB.mjs";
67
- import {
68
- ButtonChrome,
69
- CANONICAL_ICONS,
70
- DropdownButton,
71
- DropdownItem,
72
- DropdownMenu,
73
- DropdownRadioGroup,
74
- DropdownRadioItem,
75
39
  IconActivity,
76
40
  IconAreaChart,
77
41
  IconArrowDown,
@@ -150,14 +114,51 @@ import {
150
114
  IconUpload,
151
115
  IconVolume,
152
116
  IconVolumeOff,
117
+ Input,
118
+ Kbd,
119
+ Label,
120
+ Lead,
121
+ Link,
122
+ Loader,
123
+ LoadingState,
124
+ Modal,
125
+ Mono,
153
126
  OLD_UI_ICONS,
127
+ Overline,
128
+ P,
154
129
  PH_ICONS,
155
130
  PH_ICON_ALIASES,
131
+ Panel,
132
+ Progress,
133
+ Radio,
134
+ SearchInput,
135
+ SectionTitle,
136
+ SegmentedControl,
137
+ Select,
138
+ SettingsLayout,
139
+ SettingsNav,
140
+ Skeleton,
141
+ Small,
142
+ SortMenu,
143
+ Spinner,
144
+ Stat,
145
+ THEMES,
146
+ THEME_GROUPS,
147
+ THEME_INIT_SCRIPT,
148
+ Table,
149
+ Textarea,
150
+ ThemeDomSync,
151
+ ThemeSwitcher,
152
+ Toggle,
156
153
  Tooltip,
157
154
  TooltipProvider,
158
155
  createIconBase,
159
- createIconBasePath
160
- } from "./chunk-KDR6HI6F.mjs";
156
+ createIconBasePath,
157
+ getTheme,
158
+ isThemeId,
159
+ persistTheme,
160
+ readStoredTheme
161
+ } from "./chunk-2EO5VCXP.mjs";
161
162
  import "./chunk-FWCSY2DS.mjs";
162
163
  export {
163
164
  Accordion,
@@ -276,6 +277,7 @@ export {
276
277
  IconVolume,
277
278
  IconVolumeOff,
278
279
  Input,
280
+ Kbd,
279
281
  Label,
280
282
  Lead,
281
283
  Link,
@@ -307,6 +309,8 @@ export {
307
309
  THEME_INIT_SCRIPT,
308
310
  Table,
309
311
  Textarea,
312
+ ThemeDomSync,
313
+ ThemeSwitcher,
310
314
  Toggle,
311
315
  Tooltip,
312
316
  TooltipProvider,
package/dist/suite.d.mts CHANGED
@@ -1,5 +1,6 @@
1
1
  import * as react from 'react';
2
2
  import { ReactNode, ComponentType, ButtonHTMLAttributes, CSSProperties, PointerEvent, ElementType } from 'react';
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';
3
4
  import { ClassValue } from 'clsx';
4
5
  export { m } from 'motion/react';
5
6
 
@@ -12,13 +13,10 @@ declare function TodayPageFrame({ children }: {
12
13
  }): react.JSX.Element;
13
14
 
14
15
  type LucideIcon = react.ComponentType<react.SVGProps<SVGSVGElement>>;
15
- type SuiteAppSlug$1 = 'shellstack' | 'tides' | 'turtletime' | 'kraken';
16
+ type SuiteAppSlug$1 = "shellstack" | "tides" | "turtletime" | "kraken" | "shelly";
16
17
  declare function sourceToSuiteApp(source: string): SuiteAppSlug$1;
17
18
  declare function suiteAppLabel(source: string): string;
18
- /**
19
- * Small line icon for list rows — the app's suite glyph with its brand
20
- * accent on a muted base. Not the branded app tile (see SuiteAppIcon).
21
- */
19
+ /** Actual product favicon/logo for suite notification rows. */
22
20
  declare function SourceAppGlyph({ source, className, }: {
23
21
  source: string;
24
22
  className?: string;
@@ -59,7 +57,7 @@ declare function TodayHero({ message, brief, briefMeta, }: {
59
57
  brief?: ReactNode;
60
58
  briefMeta?: ReactNode;
61
59
  }): react.JSX.Element;
62
- type TodayPrimaryAccent = 'tides' | 'turtletime' | 'kraken' | 'shellstack' | 'neutral';
60
+ type TodayPrimaryAccent = "tides" | "turtletime" | "kraken" | "shellstack" | "neutral";
63
61
  /**
64
62
  * Compact primary CTA for Today — one action per app.
65
63
  * Colours live in suite-skin (.today-primary-action); no idle animation.
@@ -258,8 +256,8 @@ declare function DeferredChrome({ children }: {
258
256
 
259
257
  /**
260
258
  * Suite mobile navigation drawer. Backdrop fade + panel slide, Escape to
261
- * close, body scroll-lock and focus hand-off while open. Nav content stays
262
- * app-side via `children`.
259
+ * close, body scroll-lock and focus containment while open. Nav content stays
260
+ * app-side via `children`; Radix owns the modal interaction model.
263
261
  */
264
262
  declare function SuiteMobileDrawer({ open, onClose, children, side, showCloseButton, title, closeLabel, backdropLabel, dialogLabel, durationMs, dataTest, panelDataTest, backdropId, backdropDataTest, closeButtonId, closeButtonDataTest, panelClassName, }: {
265
263
  open: boolean;
@@ -389,7 +387,7 @@ declare function SuiteBottomNav({ items, ariaLabel, dataTest, className, }: {
389
387
  * Slugs double as accent keys (see icons/app-accents.ts) and data-test
390
388
  * suffixes (`switch-app-${slug}`, `suite-nav-${slug}`).
391
389
  */
392
- type SuiteAppSlug = 'shellstack' | 'tides' | 'turtletime' | 'kraken' | 'nakama';
390
+ type SuiteAppSlug = 'shellstack' | 'tides' | 'turtletime' | 'kraken' | 'shelly';
393
391
  interface SuiteAppDefinition {
394
392
  slug: SuiteAppSlug;
395
393
  name: string;
@@ -436,48 +434,11 @@ declare function TodayCalibrating({ onRetry, retrying, className, spinner: Spinn
436
434
  retrySpinnerClassName?: string;
437
435
  }): react.JSX.Element;
438
436
 
439
- type SuiteTheme = 'system' | 'light' | 'dark';
440
- type SuiteResolvedTheme = 'light' | 'dark';
441
- interface SuiteThemeConfig {
442
- /** localStorage key holding the stored preference. */
443
- storageKey: string;
444
- /** `data-theme` attribute value for the light theme. */
445
- lightThemeId: string;
446
- /** `data-theme` attribute value for the dark theme. */
447
- darkThemeId: string;
448
- /**
449
- * Resolved theme to assume when `matchMedia` is unavailable
450
- * (server render / pre-hydration).
451
- */
452
- fallbackTheme: SuiteResolvedTheme;
453
- /**
454
- * Optional `<meta id="theme-color-meta">` colours, synced whenever the
455
- * theme is (re)applied after mount. Omit both to leave the meta tag
456
- * untouched.
457
- */
458
- themeColorLight?: string;
459
- themeColorDark?: string;
460
- }
461
- interface SuiteThemeContextValue {
462
- theme: SuiteTheme;
463
- resolvedTheme: SuiteResolvedTheme;
464
- setTheme: (theme: SuiteTheme) => void;
465
- toggleTheme: () => void;
466
- }
467
437
  /**
468
- * Theme provider shared by suite apps. Each app's root layout runs a small
469
- * boot script that applies `data-theme` before hydration; this provider
470
- * adopts that DOM state on mount and owns every post-hydration change (user
471
- * picks a theme, or the OS preference flips while set to `system`).
472
- *
473
- * Apps wrap this with their own `ThemeProvider`/`useTheme` module that pins
474
- * the storage key, theme ids and meta colours.
438
+ * Shared suite theme cookie names. Lives in its own module so non-React
439
+ * consumers (boot scripts) can import it without pulling in client code.
475
440
  */
476
- declare function SuiteThemeProvider({ config, children, }: {
477
- config: SuiteThemeConfig;
478
- children: ReactNode;
479
- }): react.JSX.Element;
480
- declare function useSuiteTheme(): SuiteThemeContextValue;
441
+ declare const SUITE_THEME_COOKIE = "xenide-suite-theme";
481
442
 
482
443
  declare const SUITE_OPEN_ASK_AI_EVENT = "shellstack:open-ask-ai";
483
444
  declare const SUITE_ASK_AI_OPEN_KEY = "shellstack:shelly-open";
@@ -521,13 +482,17 @@ interface SuiteAiChatMessage {
521
482
  * Suite-wide Ask AI chat — Notion-style continuous thread.
522
483
  * Lives in the sidebar (or any parent that mounts it). Not Kraken Deep Research.
523
484
  */
524
- declare function SuiteAiPanel({ presets, emptyState, title, fetchChat, sendMessage, clearChat, brandIcon: BrandIcon, spinner: Spinner, open: openProp, onOpenChange, suiteAppBases, onSwitchApp, onSameAppNavigate, resolveAction, }: {
485
+ declare function SuiteAiPanel({ presets, emptyState, title, fetchChat, sendMessage, clearChat, brandIcon: BrandIcon, spinner: Spinner, open: openProp, onOpenChange, suiteAppBases, onSwitchApp, onSameAppNavigate, resolveAction, isWaitingForReply, }: {
525
486
  presets?: SuiteAiPreset[];
526
487
  emptyState?: ReactNode;
527
488
  title?: string;
528
489
  fetchChat: () => Promise<{
529
490
  messages: SuiteAiChatMessage[];
530
491
  configured: boolean;
492
+ jobs?: Array<{
493
+ status?: string;
494
+ error?: string;
495
+ }>;
531
496
  }>;
532
497
  sendMessage: (params: {
533
498
  prompt: string;
@@ -554,6 +519,8 @@ declare function SuiteAiPanel({ presets, emptyState, title, fetchChat, sendMessa
554
519
  resolveAction?: (id: string, decision: "confirm" | "cancel") => Promise<{
555
520
  messages: SuiteAiChatMessage[];
556
521
  }>;
522
+ /** A durable background job is still preparing the assistant reply. */
523
+ isWaitingForReply?: boolean;
557
524
  }): react.JSX.Element | null;
558
525
 
559
526
  interface SuiteWorkspaceEntry {
@@ -631,7 +598,7 @@ interface SuiteGlyph {
631
598
  */
632
599
  animatedAccent?: boolean;
633
600
  }
634
- type SuiteIconName = "timer-shell" | "kanban-wave" | "squid-doc" | "stack-hex" | "crew-bot" | "nakama-fist" | "workspace" | "organisation" | "integration-plug" | "suite-grid" | "bell-wave" | "today-sun";
601
+ type SuiteIconName = "timer-shell" | "kanban-wave" | "squid-doc" | "stack-hex" | "crew-bot" | "shelly-snail" | "workspace" | "organisation" | "integration-plug" | "suite-grid" | "bell-wave" | "today-sun";
635
602
  declare const SUITE_GLYPHS: Record<SuiteIconName, SuiteGlyph>;
636
603
  declare const SUITE_ICON_NAMES: SuiteIconName[];
637
604
 
@@ -641,7 +608,7 @@ declare const SUITE_ICON_NAMES: SuiteIconName[];
641
608
  * `onTileAccent` drive `<SuiteAppIcon>` (the programmatic favicon-style
642
609
  * tile + glyph mark).
643
610
  */
644
- type SuiteAccentSlug = "turtletime" | "tides" | "kraken" | "shellstack" | "crew" | "nakama";
611
+ type SuiteAccentSlug = "turtletime" | "tides" | "kraken" | "shellstack" | "crew" | "shelly";
645
612
  interface SuiteAppAccent {
646
613
  /** Display name (default aria label for app marks). */
647
614
  label: string;
@@ -708,7 +675,7 @@ declare const SIDEBAR_COLLAPSE_THRESHOLD = 80;
708
675
  declare const SIDEBAR_MIN_EXPANDED_WIDTH = 180;
709
676
  declare const SIDEBAR_MAX_WIDTH = 640;
710
677
  declare const SIDEBAR_DEFAULT_WIDTH = 320;
711
- /** Shared across Tides / TurtleTime / Kraken / ShellStack / Nakama. */
678
+ /** Shared across Tides / TurtleTime / Kraken / ShellStack / Shelly. */
712
679
  declare const SUITE_SIDEBAR_WIDTH_KEY = "shellstack:sidebar-width";
713
680
  declare const SUITE_SIDEBAR_WIDTH_COOKIE = "shellstack_sidebar_width";
714
681
  /** Desktop column width: icon rail when collapsed, otherwise the persisted width. */
@@ -928,7 +895,7 @@ interface SuiteSidebarProps {
928
895
  /** Optional custom app switcher node, or a function of collapsed state. */
929
896
  appSwitcher?: CollapsedNode;
930
897
  /** Workspace/org/project switcher rendered below the app switcher. */
931
- contextSwitcher: CollapsedNode;
898
+ contextSwitcher?: CollapsedNode;
932
899
  navItems: SuiteSidebarNavItem[];
933
900
  /** Optional secondary nav / tree rendered below primary nav. */
934
901
  secondaryNav?: ReactNode;
@@ -987,4 +954,139 @@ interface SuiteAppLayoutProps {
987
954
  */
988
955
  declare function SuiteAppLayout({ sidebar, children, mobileHeader, bottomNav, sidebarWidth, collapsed, lockMainScroll, onStartResize, onResizeBy, onResetWidth, className, }: SuiteAppLayoutProps): react.JSX.Element;
989
956
 
990
- 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_ASK_AI_OPEN_KEY, SUITE_ASK_AI_OPEN_QUERY, SUITE_GLYPHS, SUITE_ICON_NAMES, SUITE_MUTATED_EVENT, SUITE_OPEN_ASK_AI_EVENT, SUITE_SIDEBAR_WIDTH_COOKIE, SUITE_SIDEBAR_WIDTH_KEY, SUITE_SPRINGS, 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, type SuiteCommandItem, type SuiteCommandPaletteComponent, type SuiteDropdownItemComponent, type SuiteDropdownMenuComponent, type SuiteDropdownMenuProps, SuiteEmptyState, type SuiteGlyph, type SuiteGlyphElement, type SuiteHrefTarget, 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, 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, getTodayGreeting, openSuiteAskAi, pathWithSuiteAskAiOpen, persistSidebarWidth, persistSuiteAskAiOpen, readSidebarWidth, readSuiteAskAiOpen, resetSuiteSidebarWidth, resolveSuiteNotificationHref, sidebarColumnWidth, sourceToSuiteApp, suiteAppBaseUrl, suiteAppLabel, useIdleMount, useSidebarWidth, useSuiteTheme };
957
+ interface SuiteIntegrationPickerItem {
958
+ id: string;
959
+ label: string;
960
+ description: string;
961
+ icon?: ReactNode;
962
+ categories?: string[];
963
+ authSchemes?: string[];
964
+ connecting?: boolean;
965
+ unavailableReason?: string;
966
+ }
967
+ interface SuiteIntegrationAuthField {
968
+ name: string;
969
+ label: string;
970
+ type?: "password" | "text" | "url";
971
+ }
972
+ interface SuiteIntegrationAuthDetails {
973
+ fields: SuiteIntegrationAuthField[];
974
+ auth_scheme: string | null;
975
+ managed: boolean;
976
+ }
977
+ interface SuiteIntegrationAuthSelection {
978
+ auth_scheme: string;
979
+ auth_fields?: Record<string, string>;
980
+ }
981
+ interface SuiteIntegrationPickerProps {
982
+ open: boolean;
983
+ items: SuiteIntegrationPickerItem[];
984
+ connectedItems?: SuiteIntegrationPickerItem[];
985
+ loading?: boolean;
986
+ catalogLoading?: boolean;
987
+ loadingMore?: boolean;
988
+ hasMore?: boolean;
989
+ onEndReached?: () => void;
990
+ search?: string;
991
+ onSearchChange?: (value: string) => void;
992
+ category?: string;
993
+ categories?: string[];
994
+ onCategoryChange?: (value: string) => void;
995
+ onClose: () => void;
996
+ onConnect: (item: SuiteIntegrationPickerItem, auth?: SuiteIntegrationAuthSelection) => void | Promise<void>;
997
+ onFetchAuthFields?: (item: SuiteIntegrationPickerItem, authScheme: string) => Promise<SuiteIntegrationAuthDetails>;
998
+ onDisconnect?: (item: SuiteIntegrationPickerItem) => void;
999
+ title?: string;
1000
+ description?: string;
1001
+ dataTest?: string;
1002
+ }
1003
+ declare function SuiteIntegrationPicker({ open, items, connectedItems, loading, catalogLoading, loadingMore, hasMore, onEndReached, search: controlledSearch, onSearchChange, category: controlledCategory, categories: controlledCategories, onCategoryChange, onClose, onConnect, onFetchAuthFields, onDisconnect, title, description, dataTest, }: SuiteIntegrationPickerProps): react.JSX.Element;
1004
+
1005
+ type SuiteIntegrationRuleActionType = "create_tides_task" | "draft_time_entry" | "create_suite_notification";
1006
+ interface SuiteIntegrationRule {
1007
+ id: string;
1008
+ name: string;
1009
+ trigger_event_type: string;
1010
+ action_type: string;
1011
+ action_config: Record<string, unknown>;
1012
+ enabled: boolean;
1013
+ last_fired_at: string | null;
1014
+ }
1015
+ interface SuiteIntegrationEvent {
1016
+ id: string;
1017
+ provider: string;
1018
+ event_type: string;
1019
+ processed_at: string | null;
1020
+ created_at: string;
1021
+ }
1022
+ interface SuiteIntegrationRuleProject {
1023
+ id: string;
1024
+ name: string;
1025
+ }
1026
+ interface SuiteIntegrationRuleInput {
1027
+ name: string;
1028
+ trigger_event_type: string;
1029
+ action_type: SuiteIntegrationRuleActionType;
1030
+ action_config: Record<string, string>;
1031
+ }
1032
+ interface SuiteIntegrationRulesProps {
1033
+ canManage: boolean;
1034
+ projects: SuiteIntegrationRuleProject[];
1035
+ rules: SuiteIntegrationRule[];
1036
+ events: SuiteIntegrationEvent[];
1037
+ loading?: boolean;
1038
+ error?: string | null;
1039
+ onCreate?: (input: SuiteIntegrationRuleInput) => Promise<void>;
1040
+ onUpdate?: (id: string, patch: {
1041
+ enabled?: boolean;
1042
+ }) => Promise<void>;
1043
+ onDelete?: (id: string) => Promise<void>;
1044
+ onRefresh?: () => void;
1045
+ dataTest?: string;
1046
+ }
1047
+ declare function SuiteIntegrationRules({ canManage, projects, rules, events, loading, error, onCreate, onUpdate, onDelete, onRefresh, dataTest, }: SuiteIntegrationRulesProps): react.JSX.Element;
1048
+
1049
+ interface SuiteDirectoryClient {
1050
+ id: string;
1051
+ name: string;
1052
+ icon?: string | null;
1053
+ color?: string | null;
1054
+ icon_image?: string | null;
1055
+ }
1056
+ interface SuiteDirectoryProject {
1057
+ id: string;
1058
+ name: string;
1059
+ icon?: string | null;
1060
+ color?: string | null;
1061
+ clientId?: string | null;
1062
+ isArchived?: boolean;
1063
+ icon_image?: string | null;
1064
+ }
1065
+ interface SuiteDirectoryFields {
1066
+ name: string;
1067
+ icon: string;
1068
+ color: string;
1069
+ iconImageFile?: File | null;
1070
+ clearIconImage?: boolean;
1071
+ }
1072
+ interface SuiteDirectoryProjectFields extends SuiteDirectoryFields {
1073
+ clientId: string | null;
1074
+ isArchived?: boolean;
1075
+ }
1076
+ interface SuiteClientsProjectsDirectoryProps {
1077
+ clients: SuiteDirectoryClient[];
1078
+ projects: SuiteDirectoryProject[];
1079
+ canEdit?: boolean;
1080
+ loading?: boolean;
1081
+ error?: string | null;
1082
+ onCreateClient?: (fields: SuiteDirectoryFields) => Promise<SuiteDirectoryClient | void>;
1083
+ onUpdateClient?: (client: SuiteDirectoryClient, fields: SuiteDirectoryFields) => Promise<SuiteDirectoryClient | void>;
1084
+ onDeleteClient?: (client: SuiteDirectoryClient) => Promise<void>;
1085
+ onCreateProject?: (fields: SuiteDirectoryProjectFields) => Promise<SuiteDirectoryProject | void>;
1086
+ onUpdateProject?: (project: SuiteDirectoryProject, fields: SuiteDirectoryProjectFields) => Promise<SuiteDirectoryProject | void>;
1087
+ onDeleteProject?: (project: SuiteDirectoryProject) => Promise<void>;
1088
+ dataTest?: string;
1089
+ }
1090
+ declare function SuiteClientsProjectsDirectory({ clients, projects, canEdit, loading, error, onCreateClient, onUpdateClient, onDeleteClient, onCreateProject, onUpdateProject, onDeleteProject, dataTest, }: SuiteClientsProjectsDirectoryProps): react.JSX.Element;
1091
+
1092
+ 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_ASK_AI_OPEN_KEY, SUITE_ASK_AI_OPEN_QUERY, SUITE_GLYPHS, SUITE_ICON_NAMES, SUITE_MUTATED_EVENT, 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, 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 SuiteNotificationsResponse, SuitePage, SuitePageHeader, type SuitePageWidth, 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, getTodayGreeting, openSuiteAskAi, pathWithSuiteAskAiOpen, persistSidebarWidth, persistSuiteAskAiOpen, readSidebarWidth, readSuiteAskAiOpen, resetSuiteSidebarWidth, resolveSuiteNotificationHref, sidebarColumnWidth, sourceToSuiteApp, suiteAppBaseUrl, suiteAppLabel, useIdleMount, useSidebarWidth };