@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
|
@@ -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
|
-
|
|
261
|
-
type
|
|
262
|
-
|
|
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
|
|
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("
|
|
119
|
-
|
|
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(
|
|
124
|
-
|
|
125
|
-
|
|
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
|
+
});
|