@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
@@ -17,6 +17,16 @@ export {
17
17
  ButtonChrome as ButtonChrome,
18
18
  type ButtonChromeProps as ButtonChromeProps,
19
19
  } from "@/components/ui/ButtonChrome";
20
+ export {
21
+ MarketingHeader,
22
+ MarketingLink,
23
+ MarketingMotionControl,
24
+ MarketingReveal,
25
+ } from "@/components/ui/Marketing";
26
+ export {
27
+ AiWritingIllustration,
28
+ IntegrationBridgeIllustration,
29
+ } from "@/components/ui/MarketingIllustrations";
20
30
  export {
21
31
  Alert as Alert,
22
32
  type AlertProps as AlertProps,
@@ -124,6 +134,7 @@ export {
124
134
  Table as Table,
125
135
  type TableColumn as TableColumn,
126
136
  type TableProps as TableProps,
137
+ type TableVariant as TableVariant,
127
138
  } from "@/components/ui/Table";
128
139
  export {
129
140
  Stat as Stat,
@@ -158,10 +169,7 @@ export {
158
169
  type CommandItem,
159
170
  type CommandPaletteProps,
160
171
  } from "@/components/ui/CommandPalette";
161
- export {
162
- Calendar,
163
- type CalendarProps,
164
- } from "@/components/ui/Calendar";
172
+ export { Calendar, type CalendarProps } from "@/components/ui/Calendar";
165
173
  export {
166
174
  Tooltip,
167
175
  TooltipProvider,
@@ -170,10 +178,7 @@ export {
170
178
  type TooltipProviderProps,
171
179
  type TooltipSide,
172
180
  } from "@/components/ui/Tooltip";
173
- export {
174
- EmptyState,
175
- type EmptyStateProps,
176
- } from "@/components/ui/EmptyState";
181
+ export { EmptyState, type EmptyStateProps } from "@/components/ui/EmptyState";
177
182
  export {
178
183
  FilterChips,
179
184
  type FilterChip,
@@ -257,9 +262,12 @@ export {
257
262
  type SpinnerProps as SpinnerProps,
258
263
  } from "@/components/ui/Spinner";
259
264
  export {
260
- Dot as Dot,
261
- type DotProps as DotProps,
262
- } from "@/components/ui/Dot";
265
+ BrandSpinner,
266
+ type BrandSpinnerProps,
267
+ type BrandSpinnerSize,
268
+ type BrandSpinnerVariant,
269
+ } from "@/components/ui/BrandSpinner";
270
+ export { Dot as Dot, type DotProps as DotProps } from "@/components/ui/Dot";
263
271
  export {
264
272
  Chip as Chip,
265
273
  type ChipProps as ChipProps,
@@ -97,13 +97,14 @@ describe("chip", () => {
97
97
  });
98
98
 
99
99
  describe("segmented control", () => {
100
- it("exposes and updates the selected option as a pressed button", async () => {
100
+ it("exposes a radio group and moves selection with arrow keys", async () => {
101
101
  const user = userEvent.setup();
102
102
 
103
103
  function Fixture() {
104
104
  const [value, setValue] = useState("board");
105
105
  return (
106
106
  <SegmentedControl
107
+ aria-label="View"
107
108
  value={value}
108
109
  onChange={setValue}
109
110
  options={[
@@ -115,15 +116,20 @@ describe("segmented control", () => {
115
116
  }
116
117
 
117
118
  render(<Fixture />);
118
- expect(screen.getByRole("button", { name: "Board" })).toHaveAttribute(
119
- "aria-pressed",
119
+ expect(screen.getByRole("radiogroup", { name: "View" })).toBeInTheDocument();
120
+ const board = screen.getByRole("radio", { name: "Board" });
121
+ expect(board).toHaveAttribute(
122
+ "aria-checked",
120
123
  "true",
121
124
  );
122
125
 
123
- await user.click(screen.getByRole("button", { name: "List" }));
124
- expect(screen.getByRole("button", { name: "List" })).toHaveAttribute(
125
- "aria-pressed",
126
+ await user.click(board);
127
+ await user.keyboard("{ArrowRight}");
128
+ const list = screen.getByRole("radio", { name: "List" });
129
+ expect(list).toHaveAttribute(
130
+ "aria-checked",
126
131
  "true",
127
132
  );
133
+ expect(list).toHaveFocus();
128
134
  });
129
135
  });
@@ -0,0 +1,39 @@
1
+ import { cleanup, render, screen } from "@testing-library/react";
2
+ import userEvent from "@testing-library/user-event";
3
+ import { afterEach, describe, expect, it } from "vitest";
4
+
5
+ import { MarketingHeader, MarketingMotionControl } from "./Marketing";
6
+
7
+ afterEach(() => {
8
+ cleanup();
9
+ document.documentElement.removeAttribute("data-marketing-paused");
10
+ });
11
+
12
+ describe("marketing controls", () => {
13
+ it("names navigation and exposes shared focus targets", () => {
14
+ render(
15
+ <MarketingHeader
16
+ brand={<a href="https://example.com">ShellStack</a>}
17
+ navigation={<a href="https://example.com/features">Features</a>}
18
+ actions={<a href="https://example.com/login">Log in</a>}
19
+ />,
20
+ );
21
+
22
+ expect(screen.getByRole("navigation", { name: "Product navigation" })).toBeInTheDocument();
23
+ expect(screen.getByRole("link", { name: "ShellStack" })).toBeInTheDocument();
24
+ });
25
+
26
+ it("pauses and resumes landing animation state", async () => {
27
+ const user = userEvent.setup();
28
+ render(<MarketingMotionControl />);
29
+
30
+ const control = screen.getByRole("button", { name: "Pause landing animations" });
31
+ await user.click(control);
32
+ expect(control).toHaveAttribute("aria-pressed", "true");
33
+ expect(document.documentElement).toHaveAttribute("data-marketing-paused");
34
+
35
+ await user.click(control);
36
+ expect(control).toHaveAttribute("aria-pressed", "false");
37
+ expect(document.documentElement).not.toHaveAttribute("data-marketing-paused");
38
+ });
39
+ });
@@ -0,0 +1,47 @@
1
+ import { cleanup, render, screen } from "@testing-library/react";
2
+ import { afterEach, describe, expect, it } from "vitest";
3
+
4
+ import { Table } from "./Table";
5
+
6
+ afterEach(cleanup);
7
+
8
+ describe("Table", () => {
9
+ it("names its scroll region and renders a custom empty state", () => {
10
+ render(
11
+ <Table
12
+ data={[] as Array<{ name: string }>}
13
+ columns={[{ key: "name", header: "Name", cell: (row) => row.name }]}
14
+ caption="People"
15
+ emptyState="No people yet."
16
+ />,
17
+ );
18
+
19
+ expect(screen.getByRole("region", { name: "People" })).toHaveAttribute(
20
+ "tabindex",
21
+ "0",
22
+ );
23
+ expect(
24
+ screen.getByRole("cell", { name: "No people yet." }),
25
+ ).toHaveAttribute("colspan", "1");
26
+ });
27
+
28
+ it("lets report pages own their empty state without an extra table row", () => {
29
+ render(
30
+ <Table
31
+ variant="report"
32
+ caption="Run report"
33
+ data={[] as Array<{ name: string }>}
34
+ columns={[{ key: "name", header: "Crew", cell: (row) => row.name }]}
35
+ emptyState={null}
36
+ />,
37
+ );
38
+ expect(
39
+ screen.getByRole("table", { name: "Run report" }),
40
+ ).toBeInTheDocument();
41
+ expect(screen.getByRole("columnheader", { name: "Crew" })).toHaveAttribute(
42
+ "scope",
43
+ "col",
44
+ );
45
+ expect(screen.queryByRole("cell")).not.toBeInTheDocument();
46
+ });
47
+ });