@xenide-io/the-old-ui-theme 0.10.0 → 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 (42) hide show
  1. package/dist/{Chip-DKT-82Lf.d.mts → Chip-Dw2g2t8D.d.mts} +14 -2
  2. package/dist/{Chip-DKT-82Lf.d.ts → Chip-Dw2g2t8D.d.ts} +14 -2
  3. package/dist/{chunk-LHE4ROON.mjs → chunk-RIPGN6FG.mjs} +412 -61
  4. package/dist/index.d.mts +3 -2
  5. package/dist/index.d.ts +3 -2
  6. package/dist/index.js +355 -23
  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 +14 -4
  11. package/dist/suite.d.ts +14 -4
  12. package/dist/suite.js +920 -513
  13. package/dist/suite.mjs +898 -523
  14. package/dist/ui.d.mts +2 -2
  15. package/dist/ui.d.ts +2 -2
  16. package/dist/ui.js +401 -66
  17. package/dist/ui.mjs +3 -1
  18. package/package.json +1 -1
  19. package/src/app/globals.css +57 -1
  20. package/src/components/ui/BrandSpinner.tsx +256 -0
  21. package/src/components/ui/CodeBlock.tsx +11 -1
  22. package/src/components/ui/Marketing.tsx +17 -1
  23. package/src/components/ui/SettingsLayout.tsx +4 -0
  24. package/src/components/ui/Table.tsx +32 -9
  25. package/src/components/ui/brand-spinner.test.tsx +62 -0
  26. package/src/components/ui/index.ts +7 -0
  27. package/src/components/ui/table.test.tsx +31 -4
  28. package/src/styles/suite-skin.css +78 -46
  29. package/src/suite/components/ai-draft-editor.tsx +184 -0
  30. package/src/suite/components/ai-panel-workflows.test.tsx +179 -0
  31. package/src/suite/components/ai-panel.tsx +184 -14
  32. package/src/suite/components/app-switcher.tsx +13 -0
  33. package/src/suite/components/command-palette-host.tsx +20 -2
  34. package/src/suite/components/suite-notification-bell.tsx +23 -2
  35. package/src/suite/components/suite-notification-settings.tsx +11 -0
  36. package/src/suite/components/suite-settings-layout.tsx +1 -1
  37. package/src/suite/components/suite-settings-mobile-nav.tsx +5 -1
  38. package/src/suite/components/suite-sidebar.tsx +2 -2
  39. package/src/suite/components/theme-provider.tsx +2 -0
  40. package/src/suite/components/today-ui.tsx +33 -28
  41. package/src/suite/index.ts +8 -0
  42. package/src/suite/lib/suite-notifications.tsx +5 -0
@@ -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="mt-4 sm:mt-6">
293
- <p
294
- key={typeof message === "string" ? message : "hero"}
295
- className="today-hero max-w-2xl font-display text-lg font-semibold tracking-tight text-ph-ink sm:text-xl sm:leading-snug"
296
- >
297
- {message}
298
- </p>
299
- {brief ? (
300
- <div className="mt-4 max-w-2xl" data-test="today-focus-brief">
301
- <p className="text-[15px] leading-[1.65] text-ph-ink">{brief}</p>
302
- {briefMeta ? (
303
- <p className="mt-1.5 text-xs text-ph-mutedtext">{briefMeta}</p>
304
- ) : null}
305
- </div>
306
- ) : null}
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
  }
@@ -415,12 +420,12 @@ export function TodayEmptyAction({
415
420
  }) {
416
421
  return (
417
422
  <div
418
- className="rounded-[var(--ph-radius-surface)] border border-dashed border-ph-border/80 bg-[var(--ph-surface-inset)] px-4 py-4 text-center"
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="mx-auto mt-1 max-w-sm text-xs leading-relaxed text-ph-subtle sm:text-sm">
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="mt-2.5 inline-flex text-sm font-semibold text-ph-brand hover:underline"
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="mt-2.5 inline-flex text-sm font-semibold text-ph-brand hover:underline"
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
- /** Desktop Today shell: main column + sticky Ask AI / brief aside. */
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-6 lg:grid-cols-[minmax(0,1fr)_minmax(16rem,20rem)] lg:items-start lg:gap-8">
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="space-y-3 lg:sticky lg:top-6 lg:self-start">
475
+ <aside className="min-w-0 space-y-5">
471
476
  {aside}
472
477
  </aside>
473
478
  ) : null}
@@ -570,19 +575,19 @@ export function TodaySection({
570
575
  children: ReactNode;
571
576
  }) {
572
577
  return (
573
- <section data-test={testId} className="space-y-5">
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.5">
580
+ <div className="flex min-w-0 items-start gap-3">
576
581
  <span
577
582
  className={cn(
578
- "inline-flex h-10 w-10 sm:h-11 sm:w-11 shrink-0 items-center justify-center rounded-[var(--ph-radius-surface)] border border-ph-border/70 shadow-[var(--ph-shadow-control)]",
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-5 w-5" aria-hidden />
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-bold tracking-tight text-ph-ink">
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
- "rounded-[var(--ph-radius-surface)] border border-ph-border/70 bg-ph-surface p-5 sm:p-5",
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
  >
@@ -84,6 +84,7 @@ export {
84
84
  type SuiteAiChatMessage,
85
85
  type SuiteAskAiOpenDetail,
86
86
  } from "./components/ai-panel";
87
+ export { SuiteAiDraftEditor, suiteAiDraftFields } from "./components/ai-draft-editor";
87
88
  export {
88
89
  SuiteWorkspaceSwitcher,
89
90
  type SuiteWorkspaceEntry,
@@ -199,3 +200,10 @@ export {
199
200
  type PaletteIcon,
200
201
  type PaletteLibrary,
201
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
  }