Skip to content

Commit 0542cd1

Browse files
committed
Merge branch 'wip/fx28-paper' into wip/platform-org-wiring
# Conflicts: # scripts/platform-allowlists.ts
2 parents 95f372a + 3152876 commit 0542cd1

115 files changed

Lines changed: 926 additions & 769 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

‎.claude/rules/sim-ui-copy.md‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,11 @@ This applies to app UI outside the Platform: settings rows, modals, panels, card
1919

2020
Platform views also share one vocabulary, documented in `apps/sim/platform/AGENTS.md` (Code-first product design) and enforced by `check:platform-design`:
2121

22-
- **Sentence case** for every literal `title`, `label` and `*Label` prop (`confirmLabel`, `createLabel`, …), for `label`s and `*Label`s in menu, column, sort, command and action data, and for button, menu item and chip text (`copy-case`). Product, plan and brand names keep their capitals through `PROPER_NOUNS` / `PROPER_PHRASES` in `scripts/platform-source-rules.ts`; a page or tab name inside a label is a common noun ("Open logs", "Switch to runs").
22+
- **Sentence case** for every literal `title`, `label` and `*Label` prop (`confirmLabel`, `createLabel`, …), for `label`s and `*Label`s in menu, column, sort, command and action data, and for button, menu item and chip text (`copy-case`). Product, plan and brand names keep their capitals through `PROPER_NOUNS` / `PROPER_PHRASES` in `scripts/platform-source-rules.ts`; Home and Wiki are destinations Paper capitalizes ("Customize Home", "Create a Wiki page"); any other page or tab name inside a label is a common noun ("Open logs", "Switch to runs"), as is chat as a place ("Explore in chat").
2323
- **The `…` glyph**, never three periods, in rendered copy and in object or record values such as status labels (`copy-ellipsis`).
24-
- **Confirmations** go through `ConfirmDialog` with a real `pendingLabel` ("Deleting…"), `safe` when nothing is lost (`confirm-owner`). Titles are "{Verb} {noun}" with no question mark, identical for one object everywhere; unsaved changes read "Unsaved changes" / "Discard".
24+
- **Confirmations** go through `ConfirmDialog` with a real `pendingLabel` ("Deleting…"), `safe` when nothing is lost (`confirm-owner`). Titles are "{Verb} {object}" with no question mark, identical for one object everywhere: a dialog about one named object names it ("Delete Daily brief", "Disconnect Gmail") and the description keeps only the consequence; otherwise the noun ("Delete 3 rows"). Unsaved changes read "Unsaved changes" / "Discard".
2525
- **Verbs**: editing saves with "Save", creating says "Create {noun}", adding a connection or credential says "Add {noun}", OAuth keeps "Connect".
26-
- **Empty and no-results**: an empty list is `EmptyState` (`Muted` in a narrow rail or dialog picker); no results read "No matching {noun}", the query in curly quotes, no period.
26+
- **Empty and no-results**: an empty list is `EmptyState` (`Muted` in a narrow rail or dialog picker); no results read "No matching {noun}": no query, no "found", no period (`copy-case`).
2727
- **Back, tabs, alerts, tooltips** belong to their owners: `DirectoryBack` / `DetailHeader` with bare-noun labels (`back-owner`), `ContentTabs` (`tab-owner`), `InlineNotice` / `FailureNotice` / a field's `error` (`alert-owner`), and `Tooltip` / `OverflowText` rather than a native `title=` (`native-title`). Statuses use Logs' words: a failed run reads "Failed".
2828

2929
**Carve-out — settings section metadata.** `SettingsNavigationItem.description` in `components/settings/navigation.ts` stays required, and `SettingsPanel` keeps rendering it as the page subtitle. Settings sections are reached through a nav list where the description is the only thing distinguishing adjacent sections, so it earns its place by the "prevents misunderstanding" test. Keep those descriptions verb-first and one line, per `sim-settings-pages.md`. Everything else on a settings page — inline `<p>` blurbs under section headings, field hints, modal bodies, row subtitles — follows the default rule above.

‎.cursor/rules/sim-ui-copy.mdc‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,11 @@ This applies to app UI outside the Platform: settings rows, modals, panels, card
1515

1616
Platform views also share one vocabulary, documented in `apps/sim/platform/AGENTS.md` (Code-first product design) and enforced by `check:platform-design`:
1717

18-
- **Sentence case** for every literal `title`, `label` and `*Label` prop (`confirmLabel`, `createLabel`, …), for `label`s and `*Label`s in menu, column, sort, command and action data, and for button, menu item and chip text (`copy-case`). Product, plan and brand names keep their capitals through `PROPER_NOUNS` / `PROPER_PHRASES` in `scripts/platform-source-rules.ts`; a page or tab name inside a label is a common noun ("Open logs", "Switch to runs").
18+
- **Sentence case** for every literal `title`, `label` and `*Label` prop (`confirmLabel`, `createLabel`, …), for `label`s and `*Label`s in menu, column, sort, command and action data, and for button, menu item and chip text (`copy-case`). Product, plan and brand names keep their capitals through `PROPER_NOUNS` / `PROPER_PHRASES` in `scripts/platform-source-rules.ts`; Home and Wiki are destinations Paper capitalizes ("Customize Home", "Create a Wiki page"); any other page or tab name inside a label is a common noun ("Open logs", "Switch to runs"), as is chat as a place ("Explore in chat").
1919
- **The `…` glyph**, never three periods, in rendered copy and in object or record values such as status labels (`copy-ellipsis`).
20-
- **Confirmations** go through `ConfirmDialog` with a real `pendingLabel` ("Deleting…"), `safe` when nothing is lost (`confirm-owner`). Titles are "{Verb} {noun}" with no question mark, identical for one object everywhere; unsaved changes read "Unsaved changes" / "Discard".
20+
- **Confirmations** go through `ConfirmDialog` with a real `pendingLabel` ("Deleting…"), `safe` when nothing is lost (`confirm-owner`). Titles are "{Verb} {object}" with no question mark, identical for one object everywhere: a dialog about one named object names it ("Delete Daily brief", "Disconnect Gmail") and the description keeps only the consequence; otherwise the noun ("Delete 3 rows"). Unsaved changes read "Unsaved changes" / "Discard".
2121
- **Verbs**: editing saves with "Save", creating says "Create {noun}", adding a connection or credential says "Add {noun}", OAuth keeps "Connect".
22-
- **Empty and no-results**: an empty list is `EmptyState` (`Muted` in a narrow rail or dialog picker); no results read "No matching {noun}", the query in curly quotes, no period.
22+
- **Empty and no-results**: an empty list is `EmptyState` (`Muted` in a narrow rail or dialog picker); no results read "No matching {noun}": no query, no "found", no period (`copy-case`).
2323
- **Back, tabs, alerts, tooltips** belong to their owners: `DirectoryBack` / `DetailHeader` with bare-noun labels (`back-owner`), `ContentTabs` (`tab-owner`), `InlineNotice` / `FailureNotice` / a field's `error` (`alert-owner`), and `Tooltip` / `OverflowText` rather than a native `title=` (`native-title`). Statuses use Logs' words: a failed run reads "Failed".
2424

2525
**Carve-out — settings section metadata.** `SettingsNavigationItem.description` in `components/settings/navigation.ts` stays required, and `SettingsPanel` keeps rendering it as the page subtitle. Settings sections are reached through a nav list where the description is the only thing distinguishing adjacent sections, so it earns its place by the "prevents misunderstanding" test. Keep those descriptions verb-first and one line, per `sim-settings-pages.md`. Everything else on a settings page — inline `<p>` blurbs under section headings, field hints, modal bodies, row subtitles — follows the default rule above.

‎apps/sim/app/(product)/_components/access-requests/review-requests.tsx‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ interface ReviewRequestsProps {
2323
}
2424

2525
function emptyTitle(query: string, status: RequestStatusFilter, statusLabel: string | null) {
26-
if (query) return `No matching requests for “${query}”`
26+
if (query) return 'No matching requests'
2727
if (status === 'pending') return 'No pending requests'
2828
if (status === 'all') return 'No requests yet'
2929
return `No ${statusLabel?.toLowerCase()} requests`

‎apps/sim/app/(product)/_components/chat/panel/panels.module.css‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@
3232
}
3333
/* The narrowest the chat beside the panel may be; the resize hook clamps to the same rule. */
3434
.frame[data-panel-open="true"] > .conversation {
35-
min-inline-size: min(var(--container-480), 50%);
35+
min-inline-size: min(var(--container-app-panel-start), 50%);
3636
}
3737
/* The panel's leading edge: an 8px grab area centered on the rule, taking no layout space. */
3838
.divider {

‎apps/sim/app/(product)/_components/get-started/get-started.module.css‎

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,4 @@
22
display: grid;
33
gap: var(--ui-list-gap);
44
min-inline-size: 0;
5-
margin-inline: calc(-1 * var(--ui-row-inset));
65
}
Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import { ActivityRow } from '@sim/emcn/activity-row'
22
import { Icon } from '@sim/emcn/icon'
3+
import { PageOverflow } from '@sim/emcn-platform/page-column'
34
import styles from '@/app/(product)/_components/get-started/get-started.module.css'
45
import { HomeSection } from '@/app/(product)/_components/home-section/home-section'
56
import type { HomeGetStartedStep } from '@/platform/shared/home'
@@ -11,18 +12,20 @@ interface GetStartedProps {
1112
export function GetStarted({ steps }: GetStartedProps) {
1213
return (
1314
<HomeSection title='Get started'>
14-
<ul className={styles.entries}>
15-
{steps.map((step) => (
16-
<ActivityRow
17-
key={step.id}
18-
leading={<Icon name={step.complete ? 'I072' : 'I070'} />}
19-
title={step.title}
20-
detail={step.detail}
21-
textMetadata={step.complete ? 'Done' : undefined}
22-
href={step.href}
23-
/>
24-
))}
25-
</ul>
15+
<PageOverflow>
16+
<ul className={styles.entries}>
17+
{steps.map((step) => (
18+
<ActivityRow
19+
key={step.id}
20+
leading={<Icon name={step.complete ? 'I072' : 'I070'} />}
21+
title={step.title}
22+
detail={step.detail}
23+
textMetadata={step.complete ? 'Done' : undefined}
24+
href={step.href}
25+
/>
26+
))}
27+
</ul>
28+
</PageOverflow>
2629
</HomeSection>
2730
)
2831
}

‎apps/sim/app/(product)/_components/links-page/links-page.tsx‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -259,7 +259,7 @@ export function LinksPage({ organizationId }: LinksPageProps) {
259259
) : unsettled ? null : links.rows.length === 0 ? (
260260
links.term ? (
261261
<EmptyState
262-
title={`No matching links for “${links.term}”`}
262+
title='No matching links'
263263
description='Searched every link you can see.'
264264
action={<Button onClick={() => links.setSearch('')}>Clear search</Button>}
265265
/>

‎apps/sim/app/(product)/_components/resource-directory/resource-directory.module.css‎

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,3 @@
3838
align-items: center;
3939
gap: var(--ui-action-gap);
4040
}
41-
.back {
42-
margin-inline: calc(-1 * var(--ui-row-inset));
43-
}

‎apps/sim/app/(product)/_components/resource-directory/resource-directory.tsx‎

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import type { ComponentProps, ReactNode, Ref } from 'react'
22
import { Chip } from '@sim/emcn/button'
3-
import { PageColumn } from '@sim/emcn-platform/page-column'
3+
import { PageColumn, PageOverflow } from '@sim/emcn-platform/page-column'
44
import type Link from 'next/link'
55
import styles from '@/app/(product)/_components/resource-directory/resource-directory.module.css'
66

@@ -57,10 +57,12 @@ interface DirectoryBackProps {
5757
}
5858
export function DirectoryBack({ href, label, onNavigate }: DirectoryBackProps) {
5959
return (
60-
<nav aria-label={`${label} navigation`} className={styles.back}>
61-
<Chip href={href} icon='I093' onNavigate={onNavigate}>
62-
{label}
63-
</Chip>
64-
</nav>
60+
<PageOverflow>
61+
<nav aria-label={`${label} navigation`}>
62+
<Chip href={href} icon='I093' onNavigate={onNavigate}>
63+
{label}
64+
</Chip>
65+
</nav>
66+
</PageOverflow>
6567
)
6668
}

‎apps/sim/app/(product)/_components/secrets-editor/secrets-editor.tsx‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -579,7 +579,7 @@ function SecretRows({
579579
</SettingsSection>
580580
)
581581
})}
582-
{noMatches && <EmptyState title={`No matching secrets for “${searchTerm}”`} />}
582+
{noMatches && <EmptyState title='No matching secrets' />}
583583
<SaveActions
584584
dirty={hasChanges}
585585
saving={isSaving}

0 commit comments

Comments
 (0)