@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.
- package/README.md +9 -10
- package/dist/{Chip-Cq3AiAji.d.mts → Chip-BzuNgJIa.d.mts} +81 -23
- package/dist/{Chip-Cq3AiAji.d.ts → Chip-BzuNgJIa.d.ts} +81 -23
- package/dist/{ai-message-blocknote-WABTHFY7.mjs → ai-message-blocknote-D4Z6DUCJ.mjs} +9 -3
- package/dist/chunk-2EO5VCXP.mjs +3912 -0
- package/dist/chunk-APKRZQRO.mjs +251 -0
- package/dist/chunk-BS7BZI5W.mjs +19 -0
- package/dist/chunk-IULORI3A.mjs +8 -0
- package/dist/index.d.mts +3 -3
- package/dist/index.d.ts +3 -3
- package/dist/index.js +997 -576
- package/dist/index.mjs +49 -45
- package/dist/suite.d.mts +157 -55
- package/dist/suite.d.ts +157 -55
- package/dist/suite.js +4249 -801
- package/dist/suite.mjs +2578 -594
- package/dist/theme-boot-P-oqKVZF.d.mts +74 -0
- package/dist/theme-boot-P-oqKVZF.d.ts +74 -0
- package/dist/theme-boot.d.mts +2 -0
- package/dist/theme-boot.d.ts +2 -0
- package/dist/theme-boot.js +44 -0
- package/dist/theme-boot.mjs +8 -0
- package/dist/ui.d.mts +5 -29
- package/dist/ui.d.ts +5 -29
- package/dist/ui.js +647 -352
- package/dist/ui.mjs +10 -12
- package/docs/README.md +34 -0
- package/docs/ai-quick-reference.md +56 -0
- package/docs/component-library-improvement-plan.md +751 -0
- package/docs/component-reference.md +81 -0
- package/docs/components.md +48 -0
- package/docs/demos.md +19 -0
- package/docs/installation.md +117 -0
- package/docs/suite-audit.md +34 -0
- package/docs/theme-token-reference.md +67 -0
- package/docs/themes.md +164 -0
- package/package.json +22 -21
- package/public/fonts/OpenRunde-Bold.woff2 +0 -0
- package/public/fonts/OpenRunde-Medium.woff2 +0 -0
- package/public/fonts/OpenRunde-Regular.woff2 +0 -0
- package/public/fonts/OpenRunde-Semibold.woff2 +0 -0
- package/scripts/package-smoke.mjs +43 -0
- package/src/app/globals.css +2 -1
- package/src/components/ui/Accordion.tsx +20 -6
- package/src/components/ui/Avatar.tsx +5 -3
- package/src/components/ui/Calendar.tsx +187 -63
- package/src/components/ui/Card.test.tsx +38 -0
- package/src/components/ui/Card.tsx +77 -14
- package/src/components/ui/CollapsibleSection.tsx +12 -4
- package/src/components/ui/CommandPalette.test.tsx +91 -4
- package/src/components/ui/CommandPalette.tsx +138 -128
- package/src/components/ui/EmptyState.tsx +2 -2
- package/src/components/ui/FormField.tsx +1 -1
- package/src/components/ui/Input.tsx +42 -18
- package/src/components/ui/Kbd.tsx +18 -3
- package/src/components/ui/Modal.tsx +3 -1
- package/src/components/ui/Progress.tsx +14 -5
- package/src/components/ui/SegmentedControl.tsx +2 -2
- package/src/components/ui/SettingsLayout.tsx +1 -1
- package/src/components/ui/Stat.tsx +3 -2
- package/src/components/ui/Table.tsx +8 -3
- package/src/components/ui/Tooltip.test.tsx +70 -1
- package/src/components/ui/Tooltip.tsx +53 -29
- package/src/components/ui/Typography.tsx +103 -49
- package/src/components/ui/avatar-stat.test.tsx +23 -0
- package/src/components/ui/calendar.test.tsx +88 -0
- package/src/components/ui/disclosure.test.tsx +39 -0
- package/src/components/ui/index.ts +44 -6
- package/src/components/ui/progress.test.tsx +15 -0
- package/src/components/ui/typography.test.tsx +26 -1
- package/src/styles/suite-skin.css +8 -2
- package/src/styles/themes.css +184 -68
- package/src/suite/components/ai-message-blocknote.tsx +13 -2
- package/src/suite/components/ai-panel.tsx +41 -10
- package/src/suite/components/app-switcher.test.tsx +21 -6
- package/src/suite/components/app-switcher.tsx +7 -11
- package/src/suite/components/suite-app-layout.tsx +12 -3
- package/src/suite/components/suite-bottom-nav.tsx +0 -1
- package/src/suite/components/suite-clients-projects-directory.test.tsx +71 -0
- package/src/suite/components/suite-clients-projects-directory.tsx +943 -0
- package/src/suite/components/suite-integration-picker.test.tsx +224 -0
- package/src/suite/components/suite-integration-picker.tsx +939 -0
- package/src/suite/components/suite-integration-rules.test.tsx +157 -0
- package/src/suite/components/suite-integration-rules.tsx +471 -0
- package/src/suite/components/suite-mobile-drawer.test.tsx +18 -2
- package/src/suite/components/suite-mobile-drawer.tsx +65 -98
- package/src/suite/components/suite-notification-bell.tsx +29 -4
- package/src/suite/components/suite-sidebar.tsx +25 -25
- package/src/suite/components/suite-skeleton.tsx +2 -2
- package/src/suite/components/suite-user-menu.tsx +9 -8
- package/src/suite/components/theme-provider.test.tsx +87 -3
- package/src/suite/components/theme-provider.tsx +144 -23
- package/src/suite/components/today-ui.tsx +79 -68
- package/src/suite/components/workspace-switcher.test.tsx +56 -0
- package/src/suite/components/workspace-switcher.tsx +3 -3
- package/src/suite/icons/app-accents.ts +12 -12
- package/src/suite/icons/glyphs.ts +6 -12
- package/src/suite/index.ts +27 -0
- package/src/suite/lib/apps.test.ts +9 -1
- package/src/suite/lib/apps.ts +14 -8
- package/src/suite/lib/cookies.ts +53 -0
- package/src/suite/lib/theme-boot.ts +32 -0
- package/src/suite/lib/theme-cookie.ts +7 -0
- package/src/suite/lib/use-sidebar-width.ts +5 -51
- package/dist/chunk-KDR6HI6F.mjs +0 -1075
- package/dist/chunk-NOI42JNZ.mjs +0 -151
- package/dist/chunk-VXISSXTB.mjs +0 -2564
- package/src/suite/lib/use-lock-mobile-page-zoom.test.tsx +0 -65
- package/src/suite/lib/use-lock-mobile-page-zoom.ts +0 -51
package/dist/suite.d.ts
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.js';
|
|
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 =
|
|
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 =
|
|
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
|
|
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' | '
|
|
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
|
-
*
|
|
469
|
-
* boot
|
|
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
|
|
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" | "
|
|
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" | "
|
|
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 /
|
|
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
|
|
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
|
-
|
|
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 };
|