@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.
- package/dist/{Chip-BzuNgJIa.d.mts → Chip-Dw2g2t8D.d.mts} +18 -4
- package/dist/{Chip-BzuNgJIa.d.ts → Chip-Dw2g2t8D.d.ts} +18 -4
- package/dist/{chunk-6SVJAU5K.mjs → chunk-RIPGN6FG.mjs} +1333 -526
- package/dist/index.d.mts +3 -2
- package/dist/index.d.ts +3 -2
- package/dist/index.js +490 -119
- package/dist/index.mjs +11 -3
- package/dist/suite-analytics--Mf1RZbw.d.mts +29 -0
- package/dist/suite-analytics--Mf1RZbw.d.ts +29 -0
- package/dist/suite.d.mts +36 -4
- package/dist/suite.d.ts +36 -4
- package/dist/suite.js +4617 -4001
- package/dist/suite.mjs +1456 -868
- package/dist/tailwind-preset.js +10 -1
- package/dist/tailwind-preset.mjs +10 -1
- package/dist/ui.d.mts +33 -4
- package/dist/ui.d.ts +33 -4
- package/dist/ui.js +1364 -571
- package/dist/ui.mjs +15 -1
- package/docs/macos-identity-audit.md +279 -0
- package/package.json +1 -1
- package/src/app/globals.css +390 -44
- package/src/components/ui/Accordion.tsx +4 -7
- package/src/components/ui/Avatar.tsx +5 -5
- package/src/components/ui/BrandSpinner.tsx +256 -0
- package/src/components/ui/Calendar.tsx +7 -7
- package/src/components/ui/CodeBlock.tsx +14 -11
- package/src/components/ui/CollapsibleSection.tsx +4 -4
- package/src/components/ui/CommandPalette.tsx +7 -10
- package/src/components/ui/EmptyState.tsx +2 -2
- package/src/components/ui/Input.tsx +1 -1
- package/src/components/ui/Marketing.tsx +144 -0
- package/src/components/ui/MarketingIllustrations.tsx +287 -0
- package/src/components/ui/Panel.tsx +1 -1
- package/src/components/ui/SegmentedControl.tsx +59 -13
- package/src/components/ui/SettingsLayout.tsx +4 -0
- package/src/components/ui/ShowcaseWrapper.tsx +3 -3
- package/src/components/ui/Table.tsx +45 -10
- package/src/components/ui/Typography.tsx +4 -4
- package/src/components/ui/avatar-stat.test.tsx +14 -1
- package/src/components/ui/brand-spinner.test.tsx +62 -0
- package/src/components/ui/index.ts +19 -11
- package/src/components/ui/interaction-primitives.test.tsx +12 -6
- package/src/components/ui/marketing.test.tsx +39 -0
- package/src/components/ui/table.test.tsx +47 -0
- package/src/styles/suite-skin.css +471 -74
- package/src/styles/themes.css +45 -45
- package/src/styles/typography.css +25 -1
- package/src/suite/components/ai-draft-editor.tsx +184 -0
- package/src/suite/components/ai-panel-workflows.test.tsx +179 -0
- package/src/suite/components/ai-panel.tsx +201 -31
- package/src/suite/components/app-switcher.tsx +22 -9
- package/src/suite/components/command-palette-host.tsx +20 -2
- package/src/suite/components/suite-app-layout.tsx +7 -4
- package/src/suite/components/suite-bottom-nav.tsx +1 -1
- package/src/suite/components/suite-clients-projects-directory.tsx +6 -6
- package/src/suite/components/suite-integration-picker.tsx +7 -7
- package/src/suite/components/suite-integration-rules.tsx +5 -5
- package/src/suite/components/suite-layout.test.tsx +32 -3
- package/src/suite/components/suite-layout.tsx +4 -4
- package/src/suite/components/suite-mobile-drawer.tsx +2 -2
- package/src/suite/components/suite-mobile-header.tsx +1 -1
- package/src/suite/components/suite-notification-bell.tsx +27 -6
- package/src/suite/components/suite-notification-settings.tsx +182 -0
- package/src/suite/components/suite-palette-library.test.tsx +46 -0
- package/src/suite/components/suite-palette-library.tsx +82 -15
- package/src/suite/components/suite-settings-layout.tsx +2 -2
- package/src/suite/components/suite-settings-mobile-nav.tsx +10 -10
- package/src/suite/components/suite-sidebar.test.tsx +39 -0
- package/src/suite/components/suite-sidebar.tsx +41 -19
- package/src/suite/components/suite-skeleton.tsx +6 -6
- package/src/suite/components/suite-user-menu.tsx +2 -2
- package/src/suite/components/theme-provider.tsx +2 -0
- package/src/suite/components/today-calibrating.tsx +3 -3
- package/src/suite/components/today-ui.tsx +42 -37
- package/src/suite/components/workspace-switcher.tsx +3 -3
- package/src/suite/index.ts +14 -0
- package/src/suite/lib/suite-notifications.tsx +5 -0
- package/tailwind-preset.ts +9 -0
|
@@ -68,7 +68,7 @@ export function SourceAppGlyph({
|
|
|
68
68
|
<img
|
|
69
69
|
src={SOURCE_APP_LOGOS[app]}
|
|
70
70
|
alt=""
|
|
71
|
-
className={cn("h-7 w-7 shrink-0 rounded-
|
|
71
|
+
className={cn("h-7 w-7 shrink-0 rounded-[var(--ph-radius-control)] object-contain", className)}
|
|
72
72
|
/>
|
|
73
73
|
);
|
|
74
74
|
}
|
|
@@ -210,11 +210,11 @@ export function TodayTopBar({
|
|
|
210
210
|
{icon}
|
|
211
211
|
</div>
|
|
212
212
|
<div className="flex min-w-0 flex-wrap items-center gap-x-2 gap-y-1">
|
|
213
|
-
<h1 className="
|
|
213
|
+
<h1 className="ph-page-title font-display font-semibold text-ph-ink">
|
|
214
214
|
Today
|
|
215
215
|
</h1>
|
|
216
216
|
{appName ? (
|
|
217
|
-
<span className="rounded-
|
|
217
|
+
<span className="rounded-[var(--ph-radius-control)] bg-ph-muted px-2 py-0.5 text-[length:var(--ph-type-overline)] font-semibold uppercase tracking-wide text-ph-subtle">
|
|
218
218
|
{appName}
|
|
219
219
|
</span>
|
|
220
220
|
) : null}
|
|
@@ -226,7 +226,7 @@ export function TodayTopBar({
|
|
|
226
226
|
type="button"
|
|
227
227
|
onClick={onRefresh}
|
|
228
228
|
disabled={refreshing || loading}
|
|
229
|
-
className="
|
|
229
|
+
className="ph-btn ph-btn-ghost ph-btn-square press-subtle h-10 w-10 text-ph-subtle"
|
|
230
230
|
data-test="today-refresh"
|
|
231
231
|
aria-label="Refresh today"
|
|
232
232
|
>
|
|
@@ -282,28 +282,33 @@ export function TodayHero({
|
|
|
282
282
|
message = "Take a nice, deep breath.",
|
|
283
283
|
brief,
|
|
284
284
|
briefMeta,
|
|
285
|
+
action,
|
|
285
286
|
}: {
|
|
286
287
|
message?: ReactNode;
|
|
287
288
|
/** AI / local focus brief under the greeting. */
|
|
288
289
|
brief?: ReactNode;
|
|
289
290
|
briefMeta?: ReactNode;
|
|
291
|
+
action?: ReactNode;
|
|
290
292
|
}) {
|
|
291
293
|
return (
|
|
292
|
-
<div className="
|
|
293
|
-
<
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
<
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
294
|
+
<div className="flex min-w-0 flex-col gap-5 border-b border-ph-border-subtle pb-6 sm:flex-row sm:items-center sm:justify-between">
|
|
295
|
+
<div className="min-w-0 flex-1">
|
|
296
|
+
<p
|
|
297
|
+
key={typeof message === "string" ? message : "hero"}
|
|
298
|
+
className="today-hero max-w-2xl font-display text-lg font-semibold tracking-tight text-ph-ink sm:text-xl"
|
|
299
|
+
>
|
|
300
|
+
{message}
|
|
301
|
+
</p>
|
|
302
|
+
{brief ? (
|
|
303
|
+
<div className="mt-2 max-w-xl" data-test="today-focus-brief">
|
|
304
|
+
<p className="text-sm leading-relaxed text-ph-subtle">{brief}</p>
|
|
305
|
+
{briefMeta ? (
|
|
306
|
+
<p className="mt-1.5 text-xs text-ph-mutedtext">{briefMeta}</p>
|
|
307
|
+
) : null}
|
|
308
|
+
</div>
|
|
309
|
+
) : null}
|
|
310
|
+
</div>
|
|
311
|
+
{action ? <div className="w-full shrink-0 sm:w-72">{action}</div> : null}
|
|
307
312
|
</div>
|
|
308
313
|
);
|
|
309
314
|
}
|
|
@@ -340,7 +345,7 @@ export function TodayPrimaryAction({
|
|
|
340
345
|
dataTest?: string;
|
|
341
346
|
}) {
|
|
342
347
|
const classes = cn(
|
|
343
|
-
"today-primary-action group relative flex w-full max-w-md items-center gap-3 overflow-hidden rounded-
|
|
348
|
+
"today-primary-action group relative flex w-full max-w-md items-center gap-3 overflow-hidden rounded-[var(--ph-radius-surface)] px-3.5 py-2.5 text-left transition-colors focus-visible:outline-none focus-visible:shadow-[var(--ph-focus-halo)] sm:px-4 sm:py-3",
|
|
344
349
|
`today-primary-action--${accent}`,
|
|
345
350
|
active && "today-primary-action--active",
|
|
346
351
|
loading && "pointer-events-none opacity-70",
|
|
@@ -349,7 +354,7 @@ export function TodayPrimaryAction({
|
|
|
349
354
|
|
|
350
355
|
const body = (
|
|
351
356
|
<>
|
|
352
|
-
<span className="today-primary-action__icon inline-flex h-9 w-9 shrink-0 items-center justify-center rounded-
|
|
357
|
+
<span className="today-primary-action__icon inline-flex h-9 w-9 shrink-0 items-center justify-center rounded-[var(--ph-radius-control)] sm:h-10 sm:w-10">
|
|
353
358
|
{icon}
|
|
354
359
|
</span>
|
|
355
360
|
<span className="min-w-0 flex-1">
|
|
@@ -363,7 +368,7 @@ export function TodayPrimaryAction({
|
|
|
363
368
|
) : null}
|
|
364
369
|
</span>
|
|
365
370
|
<span
|
|
366
|
-
className="today-primary-action__chevron shrink-0 text-base opacity-60 transition group-hover:translate-x-0.5 group-hover:opacity-100"
|
|
371
|
+
className="today-primary-action__chevron shrink-0 text-base opacity-60 transition-[transform,opacity] group-hover:translate-x-0.5 group-hover:opacity-100"
|
|
367
372
|
aria-hidden
|
|
368
373
|
>
|
|
369
374
|
→
|
|
@@ -415,12 +420,12 @@ export function TodayEmptyAction({
|
|
|
415
420
|
}) {
|
|
416
421
|
return (
|
|
417
422
|
<div
|
|
418
|
-
className="rounded-
|
|
423
|
+
className="rounded-[var(--ph-radius-surface)] border border-ph-border-subtle bg-ph-surface px-5 py-6 text-left"
|
|
419
424
|
data-test={dataTest}
|
|
420
425
|
>
|
|
421
426
|
<p className="text-sm font-semibold text-ph-ink">{title}</p>
|
|
422
427
|
{description ? (
|
|
423
|
-
<p className="
|
|
428
|
+
<p className="mt-1.5 max-w-md text-sm leading-relaxed text-ph-subtle">
|
|
424
429
|
{description}
|
|
425
430
|
</p>
|
|
426
431
|
) : null}
|
|
@@ -428,7 +433,7 @@ export function TodayEmptyAction({
|
|
|
428
433
|
href ? (
|
|
429
434
|
<a
|
|
430
435
|
href={href}
|
|
431
|
-
className="
|
|
436
|
+
className="ph-btn ph-btn-link mt-3 text-sm"
|
|
432
437
|
>
|
|
433
438
|
{actionLabel}
|
|
434
439
|
</a>
|
|
@@ -436,7 +441,7 @@ export function TodayEmptyAction({
|
|
|
436
441
|
<button
|
|
437
442
|
type="button"
|
|
438
443
|
onClick={onClick}
|
|
439
|
-
className="
|
|
444
|
+
className="ph-btn ph-btn-link mt-3 text-sm"
|
|
440
445
|
>
|
|
441
446
|
{actionLabel}
|
|
442
447
|
</button>
|
|
@@ -446,7 +451,7 @@ export function TodayEmptyAction({
|
|
|
446
451
|
);
|
|
447
452
|
}
|
|
448
453
|
|
|
449
|
-
/**
|
|
454
|
+
/** Daily work queue and contextual rail; both stay in the page's scroll flow. */
|
|
450
455
|
export function TodayLayout({
|
|
451
456
|
primary,
|
|
452
457
|
main,
|
|
@@ -464,10 +469,10 @@ export function TodayLayout({
|
|
|
464
469
|
data-test="today-layout"
|
|
465
470
|
>
|
|
466
471
|
{primary ? <div className="max-w-md">{primary}</div> : null}
|
|
467
|
-
<div className="grid gap-
|
|
472
|
+
<div className={cn("grid gap-8 lg:items-start", aside && "lg:grid-cols-[minmax(0,1fr)_minmax(15rem,19rem)]")}>
|
|
468
473
|
<div className="min-w-0 space-y-8">{main}</div>
|
|
469
474
|
{aside ? (
|
|
470
|
-
<aside className="
|
|
475
|
+
<aside className="min-w-0 space-y-5">
|
|
471
476
|
{aside}
|
|
472
477
|
</aside>
|
|
473
478
|
) : null}
|
|
@@ -496,7 +501,7 @@ export function TodayAskAiCard({
|
|
|
496
501
|
href?: string;
|
|
497
502
|
}) {
|
|
498
503
|
const classes = cn(
|
|
499
|
-
"group flex w-full items-start gap-3.5 rounded-
|
|
504
|
+
"suite-press group flex w-full items-start gap-3.5 rounded-[var(--ph-radius-surface)] border border-ph-border/70 bg-ph-surface px-4 py-3.5 text-left transition-[background-color,border-color,box-shadow] hover:border-ph-brand/35 hover:bg-[var(--ph-surface-hover)] hover:shadow-[var(--ph-shadow-raised)] focus-visible:outline-none focus-visible:shadow-[var(--ph-focus-halo)] sm:px-5",
|
|
500
505
|
className,
|
|
501
506
|
);
|
|
502
507
|
|
|
@@ -570,19 +575,19 @@ export function TodaySection({
|
|
|
570
575
|
children: ReactNode;
|
|
571
576
|
}) {
|
|
572
577
|
return (
|
|
573
|
-
<section data-test={testId} className="space-y-
|
|
578
|
+
<section data-test={testId} className="space-y-4">
|
|
574
579
|
<div className="flex items-start justify-between gap-4">
|
|
575
|
-
<div className="flex min-w-0 items-start gap-3
|
|
580
|
+
<div className="flex min-w-0 items-start gap-3">
|
|
576
581
|
<span
|
|
577
582
|
className={cn(
|
|
578
|
-
"inline-flex h-
|
|
583
|
+
"inline-flex h-8 w-8 shrink-0 items-center justify-center rounded-[var(--ph-radius-control)]",
|
|
579
584
|
iconClassName ?? "bg-ph-muted text-ph-ink",
|
|
580
585
|
)}
|
|
581
586
|
>
|
|
582
|
-
<Icon className="h-
|
|
587
|
+
<Icon className="h-4 w-4" aria-hidden />
|
|
583
588
|
</span>
|
|
584
589
|
<div className="min-w-0 pt-0.5">
|
|
585
|
-
<h2 className="font-display text-lg font-
|
|
590
|
+
<h2 className="font-display text-lg font-semibold tracking-tight text-ph-ink">
|
|
586
591
|
{title}
|
|
587
592
|
</h2>
|
|
588
593
|
{description ? (
|
|
@@ -609,7 +614,7 @@ export function TodayPanel({
|
|
|
609
614
|
return (
|
|
610
615
|
<div
|
|
611
616
|
className={cn(
|
|
612
|
-
"
|
|
617
|
+
"today-panel rounded-[var(--ph-radius-surface)] border border-ph-border-subtle bg-ph-surface p-5",
|
|
613
618
|
className,
|
|
614
619
|
)}
|
|
615
620
|
>
|
|
@@ -626,7 +631,7 @@ export function TodayEmptyState({
|
|
|
626
631
|
description?: string;
|
|
627
632
|
}) {
|
|
628
633
|
return (
|
|
629
|
-
<div className="
|
|
634
|
+
<div className="rounded-[var(--ph-radius-surface)] border border-dashed border-ph-border/80 bg-[var(--ph-surface-inset)] px-5 py-8 text-center">
|
|
630
635
|
<p className="text-sm font-semibold text-ph-ink">{title}</p>
|
|
631
636
|
{description ? (
|
|
632
637
|
<p className="mt-1.5 text-sm leading-relaxed text-ph-subtle">
|
|
@@ -77,9 +77,9 @@ export function SuiteWorkspaceSwitcher({
|
|
|
77
77
|
trigger={
|
|
78
78
|
<span
|
|
79
79
|
className={cn(
|
|
80
|
-
"flex min-w-0 max-w-full items-center gap-2 rounded-
|
|
80
|
+
"flex min-w-0 max-w-full items-center gap-2 rounded-[var(--ph-radius-control)] border border-ph-border bg-[var(--ph-surface-inset)] text-left transition-colors hover:bg-[var(--ph-surface-hover)]",
|
|
81
81
|
collapsed ? "h-10 w-10 justify-center p-0" : "w-full px-3 py-2",
|
|
82
|
-
open && "border-ph-
|
|
82
|
+
open && "border-[var(--ph-selected-border)] bg-[var(--ph-selected-bg)]",
|
|
83
83
|
)}
|
|
84
84
|
data-test="workspace-switcher-trigger"
|
|
85
85
|
>
|
|
@@ -111,7 +111,7 @@ export function SuiteWorkspaceSwitcher({
|
|
|
111
111
|
) : (
|
|
112
112
|
sections.map((section) => (
|
|
113
113
|
<div key={section.id}>
|
|
114
|
-
<p className="px-3 py-2 text-[
|
|
114
|
+
<p className="px-3 py-2 text-[length:var(--ph-type-overline)] font-semibold uppercase tracking-[0.08em] text-ph-mutedtext">
|
|
115
115
|
{section.label}
|
|
116
116
|
</p>
|
|
117
117
|
{section.workspaces.map((workspace) => (
|
package/src/suite/index.ts
CHANGED
|
@@ -11,6 +11,12 @@ export {
|
|
|
11
11
|
type SuiteAppSelectOptions,
|
|
12
12
|
} from "./components/app-switcher";
|
|
13
13
|
export { SuiteNotificationBell } from "./components/suite-notification-bell";
|
|
14
|
+
export {
|
|
15
|
+
SuiteNotificationSettings,
|
|
16
|
+
type SuiteWebPushController,
|
|
17
|
+
type SuiteWebPushState,
|
|
18
|
+
type SuiteNotificationSettingsProps,
|
|
19
|
+
} from "./components/suite-notification-settings";
|
|
14
20
|
export {
|
|
15
21
|
SuiteNotificationsProvider,
|
|
16
22
|
useSuiteNotifications,
|
|
@@ -78,6 +84,7 @@ export {
|
|
|
78
84
|
type SuiteAiChatMessage,
|
|
79
85
|
type SuiteAskAiOpenDetail,
|
|
80
86
|
} from "./components/ai-panel";
|
|
87
|
+
export { SuiteAiDraftEditor, suiteAiDraftFields } from "./components/ai-draft-editor";
|
|
81
88
|
export {
|
|
82
89
|
SuiteWorkspaceSwitcher,
|
|
83
90
|
type SuiteWorkspaceEntry,
|
|
@@ -193,3 +200,10 @@ export {
|
|
|
193
200
|
type PaletteIcon,
|
|
194
201
|
type PaletteLibrary,
|
|
195
202
|
} from "./lib/palette-api";
|
|
203
|
+
export {
|
|
204
|
+
SUITE_ANALYTICS_EVENT,
|
|
205
|
+
subscribeSuiteAnalytics,
|
|
206
|
+
trackSuiteEvent,
|
|
207
|
+
type SuiteAnalyticsEventDetail,
|
|
208
|
+
type SuiteAnalyticsProperties,
|
|
209
|
+
} from "../lib/suite-analytics";
|
|
@@ -11,6 +11,7 @@ import {
|
|
|
11
11
|
} from "react";
|
|
12
12
|
import { useRouter } from "next/navigation";
|
|
13
13
|
|
|
14
|
+
import { trackSuiteEvent } from "../../lib/suite-analytics";
|
|
14
15
|
import {
|
|
15
16
|
resolveSuiteNotificationHref,
|
|
16
17
|
suiteAppBaseUrl,
|
|
@@ -209,6 +210,10 @@ export function SuiteNotificationsProvider({
|
|
|
209
210
|
suiteAppBaseUrl("shellstack"),
|
|
210
211
|
);
|
|
211
212
|
launchUrl.searchParams.set("next", path);
|
|
213
|
+
trackSuiteEvent("Cross-App Switch", {
|
|
214
|
+
target_app: sourceApp,
|
|
215
|
+
success: true,
|
|
216
|
+
});
|
|
212
217
|
window.location.assign(launchUrl.toString());
|
|
213
218
|
return;
|
|
214
219
|
}
|
package/tailwind-preset.ts
CHANGED
|
@@ -23,6 +23,15 @@ const posthogThemePreset: Partial<Config> = {
|
|
|
23
23
|
],
|
|
24
24
|
mono: ["var(--ph-font-monospace-stack)"],
|
|
25
25
|
shortcut: ["var(--ph-font-shortcut-stack)"],
|
|
26
|
+
display: ["var(--ph-font-sans-stack)"],
|
|
27
|
+
},
|
|
28
|
+
fontSize: {
|
|
29
|
+
xs: ["var(--ph-type-meta)", { lineHeight: "var(--ph-leading-ui)" }],
|
|
30
|
+
sm: ["var(--ph-type-small)", { lineHeight: "var(--ph-leading-ui)" }],
|
|
31
|
+
base: ["var(--ph-type-body)", { lineHeight: "var(--ph-leading-body)" }],
|
|
32
|
+
lg: ["var(--ph-type-card)", { lineHeight: "1.4" }],
|
|
33
|
+
xl: ["var(--ph-type-subsection)", { lineHeight: "1.35" }],
|
|
34
|
+
"2xl": ["var(--ph-type-product-section)", { lineHeight: "1.25" }],
|
|
26
35
|
},
|
|
27
36
|
borderRadius: {
|
|
28
37
|
lemon: "var(--ph-radius-app)",
|