Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
de20772
PT-2714: Add Design Principles and UX Review Process Storybook articles
merchako Mar 30, 2026
62a8237
PT-2714: Add task management and acceptance criteria to UX review pro…
merchako Mar 30, 2026
d34d4a6
PT-2714: Restructure UX review process article into two-part format
merchako Mar 30, 2026
9c9d043
PT-2714: Expand acceptance criteria table and add byline
merchako Mar 30, 2026
4d966da
PT-2714: Add Jira UX review property, update Discord links and channels
merchako Mar 30, 2026
b643ed9
PT-2714: Rename ux-review-process.mdx to ui-work-item-lifecycle.mdx
merchako Mar 30, 2026
c5f4fc6
PT-2714: Restructure as UI Work Item Lifecycle with three-part layout
merchako Mar 30, 2026
1bc3b88
PT-2714: Render UX review property states as Badge components in MDX
merchako Mar 30, 2026
8e0757c
PT-2714: Use backtick code style for UX review property states
merchako Mar 30, 2026
58437b4
PT-2714: Reorganize UI work item lifecycle article structure
merchako Mar 30, 2026
351d97f
PT-2714: Rename ui-work-item-lifecycle.mdx to ui-review.mdx
merchako Mar 30, 2026
015bef5
PT-2714: Reframe as UI Review with checklist-led structure
merchako Mar 30, 2026
d1d0419
PT-2714: Refine UI Review article structure and copy
merchako Mar 30, 2026
4de4148
PT-2714: Fix typo Suroj → Saroj
merchako Mar 30, 2026
5f261b5
PT-2714: Fix shadcn/ui branding capitalization
merchako Mar 30, 2026
06614d6
PT-2714: Fix shadcn/ui branding in live-code-demo.mdx
merchako Mar 30, 2026
74b35e0
fix: correct Saroj name and expand vanilla-over-custom principle
merchako Apr 1, 2026
80f60e7
PT-2714: Add design guidelines with live examples to design-principles
merchako Apr 3, 2026
81ed4d3
chore: add remark-based MDX formatting pipeline
merchako Apr 9, 2026
8629943
chore: add remark config files and apply MDX formatting
merchako Apr 9, 2026
a5031c6
fix: address PR review feedback
merchako Apr 9, 2026
c7c2f68
fix: alphabetize words array in cspell.json
merchako Apr 9, 2026
8facad0
fix: correct semantic color pairing table in design-principles
merchako Apr 9, 2026
2b71278
fix: remove redundant --use remark-mdx from format:mdx:check
merchako Apr 9, 2026
97ea2d4
Remove unifiedjs.vscode-remark from recommended extensions
merchako Apr 9, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 20 additions & 0 deletions .remarkrc.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
// Remark configuration for MDX files in src/stories/.
// Runs via `format:core: remark "./src/**/*.mdx" -o`
// Mirrored by lib/platform-bible-react/.remarkrc.mjs

const config = {
plugins: [
// Parse and serialize MDX syntax (JSX, imports, exports in markdown)
'remark-mdx',
// GitHub Flavored Markdown: tables, strikethrough, task lists
'remark-gfm',
],
settings: {
// Use - for unordered list bullets (consistent with lib config)
bullet: '-',
// Use --- for thematic breaks (consistent with lib config)
rule: '-',
},
};

export default config;
1 change: 1 addition & 0 deletions .vscode/extensions.json
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
"ms-dotnettools.csdevkit",
"streetsidesoftware.code-spell-checker",
"stylelint.vscode-stylelint",
"unifiedjs.vscode-mdx",
"vitest.explorer"
]
}
3 changes: 3 additions & 0 deletions cspell.json
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@
"deleter",
"deuterocanon",
"dockbox",
"dont",
"electronmon",
"endregion",
"eten",
Expand All @@ -60,6 +61,7 @@
"lamport",
"localizable",
"localstorage",
"lucide",
"maximizable",
"networkable",
"newtonsoft",
Expand All @@ -80,6 +82,7 @@
"pubnumber",
"reinitializing",
"reserialized",
"saroj",
"shadcn",
"sillsdev",
"sldr",
Expand Down
19 changes: 19 additions & 0 deletions lib/platform-bible-react/.remarkrc.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
// Remark configuration for MDX files in lib/platform-bible-react.
// Mirrors root .remarkrc.json which covers src/stories/*.mdx.
Comment thread
irahopkinson marked this conversation as resolved.

const config = {
plugins: [
// Parse and serialize MDX syntax (JSX, imports, exports in markdown)
'remark-mdx',
// GitHub Flavored Markdown: tables, strikethrough, task lists
'remark-gfm',
],
settings: {
// Use - for unordered list bullets (consistent with root config)
bullet: '-',
// Use --- for thematic breaks (consistent with root config)
rule: '-',
},
};

export default config;
4 changes: 2 additions & 2 deletions lib/platform-bible-react/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -50,8 +50,8 @@
"format:check": "npm run format:base:check && npm run format:mdx:check",
"format:base": "prettier --write .",
"format:base:check": "prettier --check .",
"format:mdx": "remark . --use remark-mdx --ext .mdx --output",
"format:mdx:check": "remark . --use remark-mdx --ext .mdx",
"format:mdx": "remark . --ext .mdx --output",
"format:mdx:check": "remark . --ext .mdx",
"lint": "npm run lint:scripts && npm run lint:styles",
"lint:scripts": "cross-env NODE_ENV=development eslint --ext .cjs,.js,.jsx,.ts,.tsx --cache .",
"lint:styles": "stylelint **/*.{css,scss}",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,25 +10,25 @@ Consistent interaction patterns are important for users to feel comfortable and

Platform.Bible embraces the following menu patterns

| Menu | Description | Use |
| ------------- | ---------------- | --- |
| Main application menu | A [Menubar](https://github.com/paranext/paranext-core/blob/main/lib/platform-bible-react/src/stories/shadcn-ui/menubar.stories.tsx) on the application title bar's start side, that has individual dropdown menus per menu category. This menu hosts all menu items that apply to the application as a whole. | in use |
| Tab menu | A [Dropdown menu](https://github.com/paranext/paranext-core/blob/main/lib/platform-bible-react/src/stories/shadcn-ui/dropdown-menu.stories.tsx) under a [Hamburger](https://lucide.dev/icons/menu) icon button at the start side of the [Tab Toolbar](https://github.com/paranext/paranext-core/blob/main/lib/platform-bible-react/src/stories/advanced/tab-navigation/toolbar.stories.tsx). This menu hosts all cross-launch and insert related menu entries that relate to the current tab. | in use |
| Tab view options menu | A [Dropdown menu](https://github.com/paranext/paranext-core/blob/main/lib/platform-bible-react/src/stories/shadcn-ui/dropdown-menu.stories.tsx) under a [Vertical Ellipsis](https://lucide.dev/icons/ellipsis-vertical) button on the end side of the [Tab Toolbar](https://github.com/paranext/paranext-core/blob/main/lib/platform-bible-react/src/stories/advanced/tab-navigation/toolbar.stories.tsx). This menu host options to configure how the current tab should display. | planned |
| Context menu | A [Context menu](https://github.com/paranext/paranext-core/blob/main/lib/platform-bible-react/src/stories/shadcn-ui/context-menu.stories.tsx), that launches on right click and offers actions in the context of the text or ui part under the cursor | partially used |
| Text overlay menu | Actions offered next to text selection, without the need to do another right click or the like | idea |
| Menu | Description | Use |
| --------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------- |
| Main application menu | A [Menubar](https://github.com/paranext/paranext-core/blob/main/lib/platform-bible-react/src/stories/shadcn-ui/menubar.stories.tsx) on the application title bar's start side, that has individual dropdown menus per menu category. This menu hosts all menu items that apply to the application as a whole. | in use |
| Tab menu | A [Dropdown menu](https://github.com/paranext/paranext-core/blob/main/lib/platform-bible-react/src/stories/shadcn-ui/dropdown-menu.stories.tsx) under a [Hamburger](https://lucide.dev/icons/menu) icon button at the start side of the [Tab Toolbar](https://github.com/paranext/paranext-core/blob/main/lib/platform-bible-react/src/stories/advanced/tab-navigation/toolbar.stories.tsx). This menu hosts all cross-launch and insert related menu entries that relate to the current tab. | in use |
| Tab view options menu | A [Dropdown menu](https://github.com/paranext/paranext-core/blob/main/lib/platform-bible-react/src/stories/shadcn-ui/dropdown-menu.stories.tsx) under a [Vertical Ellipsis](https://lucide.dev/icons/ellipsis-vertical) button on the end side of the [Tab Toolbar](https://github.com/paranext/paranext-core/blob/main/lib/platform-bible-react/src/stories/advanced/tab-navigation/toolbar.stories.tsx). This menu host options to configure how the current tab should display. | planned |
| Context menu | A [Context menu](https://github.com/paranext/paranext-core/blob/main/lib/platform-bible-react/src/stories/shadcn-ui/context-menu.stories.tsx), that launches on right click and offers actions in the context of the text or ui part under the cursor | partially used |
| Text overlay menu | Actions offered next to text selection, without the need to do another right click or the like | idea |

## Tab navigation

Tabs can be navigated using keyboard shortcuts:

* `Ctrl + Tab` to move to the next tab
* `Ctrl + Shift + Tab` to move to the previous tab
- `Ctrl + Tab` to move to the next tab
- `Ctrl + Shift + Tab` to move to the previous tab

New Tabs can be opened by

* Pressing the `+` button. This will bring up the `New Tab` dialog on the newly opened tab.
* Pressing the Home button or selecting any option from the menu that launches a specific new tab.
- Pressing the `+` button. This will bring up the `New Tab` dialog on the newly opened tab.
- Pressing the Home button or selecting any option from the menu that launches a specific new tab.

If more tabs are present they will overflow into a menu accessible on hover of the `↕` button.

Expand All @@ -44,8 +44,8 @@ Floating tabs can be docked back into the main window by dragging and dropping t

Scripture reference selection and displaying is done using the [Book-Chapter-Verse (BCV) control](https://github.com/paranext/paranext-core/blob/main/lib/platform-bible-react/src/stories/advanced/book-chapter-control.stories.tsx). Scripture references can be entered via mouse or keyboard. There is

* a global BCV control on the application title bar - always showing all books
* an in-tab BCV control on the tab toolbar of every tab that holds Scripture or content relating to some part of Scripture - showing only books of the project in the respective tab
- a global BCV control on the application title bar - always showing all books
- an in-tab BCV control on the tab toolbar of every tab that holds Scripture or content relating to some part of Scripture - showing only books of the project in the respective tab

All BCV controls can be used for navigation. Tabs inside Platform.Bible that hold or relate to Scripture content automatically follow the selected new scriture reference.

Expand All @@ -60,8 +60,8 @@ Examples: Comments, Check Results, Find Results, Footnotes, Occurrences, etc.

Interactions exist in both directions:

* from Scripture Editor: `on Scripture reference change`, `on annotation or caller selection`, `on command / shortcut key press`
* from list: `on hover`, `on single click`, `on double click`, `on reference click`
- from Scripture Editor: `on Scripture reference change`, `on annotation or caller selection`, `on command / shortcut key press`
- from list: `on hover`, `on single click`, `on double click`, `on reference click`
and respective keyboard interactions

<iframe src="https://embed.figma.com/board/qAjw7U4EcXbi7UDpMwYGsD/Design-System-Content?node-id=1-2&t=QZDawBfx1n2dOTjC-4&embed-host=paratext-design-system" width="100%" height="400" style={{border: "none"}}>
Expand Down
28 changes: 14 additions & 14 deletions lib/platform-bible-react/src/stories/guidelines/capitalization.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -12,36 +12,36 @@ Sentence case is easier to read and scan quickly. It follows standard English co

### Examples of sentence case:

* **Buttons**: "Save changes", "Delete item", "Add new project"
* **Menu items**: "Project settings", "Export data", "User preferences"
* **Form labels**: "Email address", "Password confirmation", "Project name"
* **Headings**: "Getting started", "Advanced features", "Troubleshooting guide"
- **Buttons**: "Save changes", "Delete item", "Add new project"
- **Menu items**: "Project settings", "Export data", "User preferences"
- **Form labels**: "Email address", "Password confirmation", "Project name"
- **Headings**: "Getting started", "Advanced features", "Troubleshooting guide"

## When to use title case

Use title case sparingly and only for:

* **Product names**: "Platform.Bible", "Paranext"
* **Proper nouns**: Names of people, places, organizations
* **API names**: Specific technical terms that are established as proper nouns
- **Product names**: "Platform.Bible", "Paranext"
- **Proper nouns**: Names of people, places, organizations
- **API names**: Specific technical terms that are established as proper nouns

## Special considerations

### Abbreviations and acronyms

* Keep established abbreviations in their standard form: "URL", "API", "JSON"
* Don't force sentence case on well-known technical terms
- Keep established abbreviations in their standard form: "URL", "API", "JSON"
- Don't force sentence case on well-known technical terms

### Brands and external services

* Respect the official capitalization of external brands and services
* Examples: "GitHub", "YouTube", "macOS"
- Respect the official capitalization of external brands and services
- Examples: "GitHub", "YouTube", "macOS"

### Code and technical terms

* Follow the established conventions of the programming language or framework
* Component names in React follow PascalCase: `Button`, `DialogContent`
* CSS classes follow kebab-case: `.search-bar`, `.dialog-overlay`
- Follow the established conventions of the programming language or framework
- Component names in React follow PascalCase: `Button`, `DialogContent`
- CSS classes follow kebab-case: `.search-bar`, `.dialog-overlay`

## Implementation guidelines

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,46 +12,46 @@ It is an ongoing effort to review and agree on components and variants for commo

For lists and tables, apply the [listbox pattern](https://www.w3.org/WAI/ARIA/apg/patterns/listbox/examples/listbox-scrollable/) to make it [accessible](#)

* Code: [listbox-keyboard-navigation.hook.ts](https://github.com/paranext/paranext-core/blob/main/lib/platform-bible-react/src/hooks/listbox-keyboard-navigation.hook.ts)
- Code: [listbox-keyboard-navigation.hook.ts](https://github.com/paranext/paranext-core/blob/main/lib/platform-bible-react/src/hooks/listbox-keyboard-navigation.hook.ts)

For tables, use

* [Table](https://paranext.github.io/paranext-core/platform-bible-react-storybook/?path=/docs/shadcn-table--docs)
* Data Table
- [Table](https://paranext.github.io/paranext-core/platform-bible-react-storybook/?path=/docs/shadcn-table--docs)
- Data Table

For lists, use

* [Item](https://ui.shadcn.com/docs/components/item)
- [Item](https://ui.shadcn.com/docs/components/item)

Lists may be styled like a single column table **or** as a list of Card-like items.

* See [Result Card](https://paranext.github.io/paranext-core/platform-bible-react-storybook/?path=/docs/basics-resultscard--docs)
- See [Result Card](https://paranext.github.io/paranext-core/platform-bible-react-storybook/?path=/docs/basics-resultscard--docs)

List entries and table rows may use context menus and [Ellipsis](https://lucide.dev/icons/ellipsis) button to display more options in context of the item under the cursor.

There is a consistent selection and hover style for all lists, that is

* hover: `tw-bg-muted`
* selected: `tw-bg-muted/50`
- hover: `tw-bg-muted`
- selected: `tw-bg-muted/50`

There are consistent interaction patterns for lists, see [Interactions/Scripture editor ↔ Lists](https://github.com/paranext/paranext-core/blob/main/lib/platform-bible-react/src/stories/guidelines/application-interactions.mdx#scripture-editor--lists)

## Single and multi select options, Filters

Using the

* [Select](https://paranext.github.io/paranext-core/platform-bible-react-storybook/?path=/docs/shadcn-select--docs) component - for simple selections with little options
* Combobox component - where search, grouping and more details are helpful
* [Single Select Combobox](https://paranext.github.io/paranext-core/platform-bible-react-storybook/?path=/docs/basics-combobox--docs): use a [Chevron Down](https://lucide.dev/icons/chevron-down) icon on the trigger, close on selection
* [Multi Select Combobox](https://paranext.github.io/paranext-core/platform-bible-react-storybook/?path=/docs/advanced-multiselectcombobox--docs): use the default [Chevrons Up-Down](https://lucide.dev/icons/chevrons-up-down) icon on the trigger, do not close on selection
- [Select](https://paranext.github.io/paranext-core/platform-bible-react-storybook/?path=/docs/shadcn-select--docs) component - for simple selections with little options
- Combobox component - where search, grouping and more details are helpful
- [Single Select Combobox](https://paranext.github.io/paranext-core/platform-bible-react-storybook/?path=/docs/basics-combobox--docs): use a [Chevron Down](https://lucide.dev/icons/chevron-down) icon on the trigger, close on selection
- [Multi Select Combobox](https://paranext.github.io/paranext-core/platform-bible-react-storybook/?path=/docs/advanced-multiselectcombobox--docs): use the default [Chevrons Up-Down](https://lucide.dev/icons/chevrons-up-down) icon on the trigger, do not close on selection

Make sure to

* Show the selection with a start side checkbox (not on the end side like the [default New York style](https://ui.shadcn.com/docs/components/select)) -- up for UX discussion
* Provide context by using headings and grouping
* Apply sorting
* Do not break the default component's focus and hover styles, overflow and grow-shrink behavior (if any, improve it)
* Single select and multi select Combobox should behave the same - despite selection mode and different icon
- Show the selection with a start side checkbox (not on the end side like the [default New York style](https://ui.shadcn.com/docs/components/select)) -- up for UX discussion
- Provide context by using headings and grouping
- Apply sorting
- Do not break the default component's focus and hover styles, overflow and grow-shrink behavior (if any, improve it)
- Single select and multi select Combobox should behave the same - despite selection mode and different icon

<iframe src="https://embed.figma.com/design/hJirMCWP9O9riw39Gd5zyl/Design-System-Figma?node-id=0-1&embed-host=paratext-design-system" width="100%" height="400" style={{border: "none"}}>
Your browser does not support iframes.
Expand Down
Loading
Loading