Skip to content

Conversation

@ibalosh
Copy link
Contributor

@ibalosh ibalosh commented Dec 4, 2025

ref https://linear.app/ghost/issue/NY-722/migrate-ghost-codebase-to-kebab-case-file-naming-convention

what

  • Renamed all files to match to kebab-case format
  • Added ESLint kebab-case rule

why

  • To match our working agreement on filenames in Ghost repo

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Dec 4, 2025

Walkthrough

This PR standardizes filenames/imports in apps/admin-x-design-system from PascalCase to kebab-case across many components and Storybook files, updates several lazy/dynamic import specifiers, replaces a number of Tailwind sizing utilities with project sizing tokens, adds an ESLint rule ghost/filenames/match-regex in apps/admin-x-design-system/.eslintrc.cjs, and removes an empty "Usage" subsection from the package README. Changes are limited to import paths, filename casing, some className token substitutions, EOF formatting, and the added lint rule; no exported public API signatures or runtime control flow were altered.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Areas to check:

  • All updated import paths (including lazy/dynamic imports) match the actual filenames on case-sensitive filesystems.
  • apps/admin-x-design-system/.eslintrc.cjs — verify the ghost/filenames/match-regex rule is syntactically correct and the regex matches the intended filename pattern.
  • Tailwind sizing token replacements (examples: size-4, size-6, size-24, size-[10px]) align with the repo's Tailwind config and don't change layout unexpectedly.
  • Storybook and README edits for accidental content removal or formatting regressions.
  • A small sample of components where className/token changes occurred (radio, checkbox, pagination, sort-menu, preview-modal) to confirm no visual regressions.

Pre-merge checks and finishing touches

✅ Passed checks (3 passed)
Check name Status Explanation
Title check ✅ Passed The title 'Renamed files to kebab-case for admin design system' directly and concisely describes the main change across all files in the changeset.
Description check ✅ Passed The description explains the changes (renaming to kebab-case, adding ESLint rule) and their purpose, relating directly to the changeset contents.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch moved-to-kebab-case-formatting-admin-x-design-system

📜 Recent review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 56178a2 and 06d7c6c.

📒 Files selected for processing (107)
  • apps/admin-x-design-system/.eslintrc.cjs (1 hunks)
  • apps/admin-x-design-system/.storybook/preview.tsx (1 hunks)
  • apps/admin-x-design-system/README.md (0 hunks)
  • apps/admin-x-design-system/src/boilerplate.stories.tsx (1 hunks)
  • apps/admin-x-design-system/src/design-system-app.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/avatar.stories.tsx (2 hunks)
  • apps/admin-x-design-system/src/global/banner.stories.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/breadcrumbs.stories.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/breadcrumbs.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/button-group.stories.tsx (2 hunks)
  • apps/admin-x-design-system/src/global/button-group.tsx (2 hunks)
  • apps/admin-x-design-system/src/global/button.stories.tsx (2 hunks)
  • apps/admin-x-design-system/src/global/button.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/chrome/desktop-chrome-header.stories.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/chrome/desktop-chrome.stories.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/chrome/mobile-chrome.stories.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/error-boundary.stories.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/error-boundary.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/form/checkbox-group.stories.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/form/checkbox-group.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/form/checkbox.stories.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/form/checkbox.tsx (2 hunks)
  • apps/admin-x-design-system/src/global/form/code-editor-view.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/form/code-editor.stories.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/form/code-editor.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/form/color-indicator.stories.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/form/color-indicator.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/form/color-picker-field.stories.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/form/color-picker-field.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/form/color-picker.stories.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/form/color-picker.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/form/currency-field.stories.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/form/currency-field.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/form/file-upload.stories.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/form/form.stories.tsx (2 hunks)
  • apps/admin-x-design-system/src/global/form/form.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/form/html-editor.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/form/html-field.stories.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/form/html-field.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/form/image-upload.stories.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/form/image-upload.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/form/koenig-editor-base.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/form/multi-select.stories.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/form/multi-select.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/form/radio.stories.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/form/radio.tsx (2 hunks)
  • apps/admin-x-design-system/src/global/form/select.stories.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/form/select.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/form/text-area.stories.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/form/text-area.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/form/text-field.stories.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/form/text-field.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/form/toggle-group.stories.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/form/toggle.stories.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/form/toggle.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/form/url-text-field.stories.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/form/url-text-field.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/heading.stories.tsx (2 hunks)
  • apps/admin-x-design-system/src/global/heading.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/hint.stories.tsx (2 hunks)
  • apps/admin-x-design-system/src/global/icon-label.stories.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/icon-label.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/icon.stories.tsx (2 hunks)
  • apps/admin-x-design-system/src/global/infinite-scroll-listener.stories.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/layout/app-menu.tsx (2 hunks)
  • apps/admin-x-design-system/src/global/layout/global-actions.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/layout/page-header.stories.tsx (2 hunks)
  • apps/admin-x-design-system/src/global/layout/page.stories.tsx (4 hunks)
  • apps/admin-x-design-system/src/global/layout/page.tsx (2 hunks)
  • apps/admin-x-design-system/src/global/layout/view-container.stories.tsx (2 hunks)
  • apps/admin-x-design-system/src/global/layout/view-container.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/link.stories.tsx (2 hunks)
  • apps/admin-x-design-system/src/global/list-heading.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/list-item.stories.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/list.stories.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/list.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/loading-indicator.stories.tsx (3 hunks)
  • apps/admin-x-design-system/src/global/menu.stories.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/menu.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/modal/confirmation-modal.stories.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/modal/confirmation-modal.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/modal/limit-modal.stories.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/modal/limit-modal.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/modal/modal-page.stories.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/modal/modal-page.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/modal/modal.stories.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/modal/modal.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/modal/preview-modal.stories.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/modal/preview-modal.tsx (2 hunks)
  • apps/admin-x-design-system/src/global/no-value-label.stories.tsx (3 hunks)
  • apps/admin-x-design-system/src/global/no-value-label.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/pagination.stories.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/pagination.tsx (2 hunks)
  • apps/admin-x-design-system/src/global/popover.stories.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/separator.stories.tsx (2 hunks)
  • apps/admin-x-design-system/src/global/sort-menu.stories.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/sort-menu.tsx (2 hunks)
  • apps/admin-x-design-system/src/global/sortable-list.stories.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/sortable-list.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/sticky-footer.stories.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/tab-view.stories.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/tab-view.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/table-head.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/table-row.stories.tsx (2 hunks)
  • apps/admin-x-design-system/src/global/table.stories.tsx (2 hunks)
  • apps/admin-x-design-system/src/global/table.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/table/dynamic-table.stories.tsx (2 hunks)
⛔ Files not processed due to max files limit (27)
  • apps/admin-x-design-system/src/global/table/dynamic-table.tsx
  • apps/admin-x-design-system/src/global/toast.stories.tsx
  • apps/admin-x-design-system/src/global/toast.tsx
  • apps/admin-x-design-system/src/global/tooltip.stories.tsx
  • apps/admin-x-design-system/src/index.ts
  • apps/admin-x-design-system/src/providers/design-system-provider.tsx
  • apps/admin-x-design-system/src/settings/setting-group-content.stories.tsx
  • apps/admin-x-design-system/src/settings/setting-group-content.tsx
  • apps/admin-x-design-system/src/settings/setting-group-header.stories.tsx
  • apps/admin-x-design-system/src/settings/setting-group-header.tsx
  • apps/admin-x-design-system/src/settings/setting-group.stories.tsx
  • apps/admin-x-design-system/src/settings/setting-group.tsx
  • apps/admin-x-design-system/src/settings/setting-nav-item.stories.tsx
  • apps/admin-x-design-system/src/settings/setting-nav-item.tsx
  • apps/admin-x-design-system/src/settings/setting-nav-section.stories.tsx
  • apps/admin-x-design-system/src/settings/setting-section-header.stories.tsx
  • apps/admin-x-design-system/src/settings/setting-section.stories.tsx
  • apps/admin-x-design-system/src/settings/setting-section.tsx
  • apps/admin-x-design-system/src/settings/setting-value.stories.tsx
  • apps/admin-x-design-system/src/settings/setting-value.tsx
  • apps/admin-x-design-system/src/settings/stripe-button.stories.tsx
  • apps/admin-x-design-system/src/settings/stripe-button.tsx
  • apps/admin-x-design-system/src/utils/modals.tsx
  • apps/admin-x-design-system/test/.eslintrc.cjs
  • apps/admin-x-design-system/test/unit/hooks/use-pagination.test.ts
  • apps/admin-x-design-system/test/unit/hooks/use-sortable-indexed-list.test.ts
  • apps/admin-x-design-system/test/unit/utils/format-url.test.ts
💤 Files with no reviewable changes (1)
  • apps/admin-x-design-system/README.md
✅ Files skipped from review due to trivial changes (2)
  • apps/admin-x-design-system/src/global/form/form.tsx
  • apps/admin-x-design-system/src/global/form/text-field.tsx
🚧 Files skipped from review as they are similar to previous changes (58)
  • apps/admin-x-design-system/src/global/heading.stories.tsx
  • apps/admin-x-design-system/src/global/form/multi-select.tsx
  • apps/admin-x-design-system/src/global/chrome/desktop-chrome.stories.tsx
  • apps/admin-x-design-system/src/global/list.stories.tsx
  • apps/admin-x-design-system/src/global/chrome/mobile-chrome.stories.tsx
  • apps/admin-x-design-system/src/global/breadcrumbs.stories.tsx
  • apps/admin-x-design-system/src/global/modal/confirmation-modal.stories.tsx
  • apps/admin-x-design-system/src/global/form/color-picker.stories.tsx
  • apps/admin-x-design-system/src/global/avatar.stories.tsx
  • apps/admin-x-design-system/src/global/sortable-list.tsx
  • apps/admin-x-design-system/src/global/modal/modal.stories.tsx
  • apps/admin-x-design-system/src/global/table-head.tsx
  • apps/admin-x-design-system/src/global/form/toggle.stories.tsx
  • apps/admin-x-design-system/src/global/layout/view-container.stories.tsx
  • apps/admin-x-design-system/src/global/modal/limit-modal.tsx
  • apps/admin-x-design-system/src/global/loading-indicator.stories.tsx
  • apps/admin-x-design-system/src/global/form/image-upload.stories.tsx
  • apps/admin-x-design-system/src/global/list-item.stories.tsx
  • apps/admin-x-design-system/src/global/form/html-field.stories.tsx
  • apps/admin-x-design-system/src/global/form/checkbox-group.stories.tsx
  • apps/admin-x-design-system/src/global/form/checkbox-group.tsx
  • apps/admin-x-design-system/src/global/icon-label.stories.tsx
  • apps/admin-x-design-system/src/global/layout/page-header.stories.tsx
  • apps/admin-x-design-system/src/global/button.stories.tsx
  • apps/admin-x-design-system/src/global/layout/page.stories.tsx
  • apps/admin-x-design-system/src/global/sticky-footer.stories.tsx
  • apps/admin-x-design-system/src/global/no-value-label.tsx
  • apps/admin-x-design-system/src/global/modal/modal.tsx
  • apps/admin-x-design-system/src/global/icon-label.tsx
  • apps/admin-x-design-system/src/global/modal/confirmation-modal.tsx
  • apps/admin-x-design-system/src/global/breadcrumbs.tsx
  • apps/admin-x-design-system/src/global/form/color-picker-field.stories.tsx
  • apps/admin-x-design-system/src/global/layout/page.tsx
  • apps/admin-x-design-system/src/global/table/dynamic-table.stories.tsx
  • apps/admin-x-design-system/.storybook/preview.tsx
  • apps/admin-x-design-system/src/global/tab-view.stories.tsx
  • apps/admin-x-design-system/src/global/form/color-indicator.tsx
  • apps/admin-x-design-system/src/global/form/code-editor.stories.tsx
  • apps/admin-x-design-system/src/global/list-heading.tsx
  • apps/admin-x-design-system/src/global/form/toggle.tsx
  • apps/admin-x-design-system/src/global/form/text-area.stories.tsx
  • apps/admin-x-design-system/src/global/infinite-scroll-listener.stories.tsx
  • apps/admin-x-design-system/src/global/icon.stories.tsx
  • apps/admin-x-design-system/src/global/form/checkbox.tsx
  • apps/admin-x-design-system/src/global/error-boundary.tsx
  • apps/admin-x-design-system/src/global/hint.stories.tsx
  • apps/admin-x-design-system/src/global/form/form.stories.tsx
  • apps/admin-x-design-system/src/global/error-boundary.stories.tsx
  • apps/admin-x-design-system/src/global/link.stories.tsx
  • apps/admin-x-design-system/src/global/separator.stories.tsx
  • apps/admin-x-design-system/src/global/table.tsx
  • apps/admin-x-design-system/src/global/form/code-editor.tsx
  • apps/admin-x-design-system/src/global/list.tsx
  • apps/admin-x-design-system/src/global/form/radio.stories.tsx
  • apps/admin-x-design-system/src/global/form/text-area.tsx
  • apps/admin-x-design-system/src/global/modal/modal-page.stories.tsx
  • apps/admin-x-design-system/src/global/form/url-text-field.tsx
  • apps/admin-x-design-system/src/global/form/html-editor.tsx
🧰 Additional context used
🧠 Learnings (23)
📓 Common learnings
Learnt from: CR
Repo: TryGhost/Ghost PR: 0
File: apps/shade/AGENTS.md:0-0
Timestamp: 2025-11-26T11:05:59.314Z
Learning: Applies to apps/shade/src/components/**/*.{ts,tsx} : Use `PascalCase` for component identifiers in filenames while keeping ShadCN-generated files in kebab-case
Learnt from: CR
Repo: TryGhost/Ghost PR: 0
File: apps/shade/AGENTS.md:0-0
Timestamp: 2025-11-26T11:05:59.314Z
Learning: Applies to apps/shade/src/**/*.{ts,tsx,js} : Use `camelCase` for function and variable names
Learnt from: ibalosh
Repo: TryGhost/Ghost PR: 25525
File: apps/shade/src/shade-app.tsx:4-4
Timestamp: 2025-11-25T11:58:51.652Z
Learning: In apps/shade, the app wrapper file should be named `src/shade-app.tsx` (kebab-case) while the component itself is exported as `ShadeApp` (PascalCase). Context providers should be placed in `src/providers/*` using kebab-case filenames.
Learnt from: CR
Repo: TryGhost/Ghost PR: 0
File: apps/shade/AGENTS.md:0-0
Timestamp: 2025-11-26T11:05:59.314Z
Learning: Applies to apps/shade/{src,test}/**/*.{ts,tsx,js} : Follow ESLint and `tailwindcss/*` plugin rules when writing styles
Learnt from: CR
Repo: TryGhost/Ghost PR: 0
File: apps/shade/AGENTS.md:0-0
Timestamp: 2025-11-26T11:05:59.314Z
Learning: Applies to apps/shade/src/**/*.{ts,tsx,js} : Use the `@` alias for internal imports (e.g., `@/lib/utils`)
Learnt from: sagzy
Repo: TryGhost/Ghost PR: 24673
File: ghost/i18n/lib/i18n.js:34-35
Timestamp: 2025-11-24T11:12:15.712Z
Learning: In the Ghost i18n package (ghost/i18n/lib/i18n.js), changing existing locale codes requires backwards compatibility handling for users who have already configured those locales. Such changes should be done in a separate PR with migration logic rather than included in feature PRs.
Learnt from: CR
Repo: TryGhost/Ghost PR: 0
File: apps/shade/AGENTS.md:0-0
Timestamp: 2025-11-26T11:05:59.314Z
Learning: Applies to apps/shade/**/*.stories.{ts,tsx} : Storybook stories should demonstrate key variants and states (sizes, disabled/loading, critical props) with minimal but representative examples
📚 Learning: 2025-11-26T11:05:59.314Z
Learnt from: CR
Repo: TryGhost/Ghost PR: 0
File: apps/shade/AGENTS.md:0-0
Timestamp: 2025-11-26T11:05:59.314Z
Learning: Applies to apps/shade/src/components/**/*.{ts,tsx} : Use `PascalCase` for component identifiers in filenames while keeping ShadCN-generated files in kebab-case

Applied to files:

  • apps/admin-x-design-system/src/global/chrome/desktop-chrome-header.stories.tsx
  • apps/admin-x-design-system/src/global/form/image-upload.tsx
  • apps/admin-x-design-system/src/global/banner.stories.tsx
  • apps/admin-x-design-system/src/global/modal/preview-modal.stories.tsx
  • apps/admin-x-design-system/src/global/layout/app-menu.tsx
  • apps/admin-x-design-system/src/global/form/koenig-editor-base.tsx
  • apps/admin-x-design-system/src/design-system-app.tsx
  • apps/admin-x-design-system/src/global/sort-menu.tsx
  • apps/admin-x-design-system/src/global/tab-view.tsx
  • apps/admin-x-design-system/src/global/menu.tsx
  • apps/admin-x-design-system/src/global/layout/view-container.tsx
  • apps/admin-x-design-system/src/boilerplate.stories.tsx
  • apps/admin-x-design-system/src/global/form/checkbox.stories.tsx
  • apps/admin-x-design-system/src/global/form/text-field.stories.tsx
  • apps/admin-x-design-system/src/global/table-row.stories.tsx
  • apps/admin-x-design-system/src/global/form/color-picker.tsx
  • apps/admin-x-design-system/src/global/button.tsx
  • apps/admin-x-design-system/src/global/table.stories.tsx
  • apps/admin-x-design-system/src/global/form/html-field.tsx
  • apps/admin-x-design-system/src/global/heading.tsx
  • apps/admin-x-design-system/.eslintrc.cjs
📚 Learning: 2025-11-26T11:05:59.314Z
Learnt from: CR
Repo: TryGhost/Ghost PR: 0
File: apps/shade/AGENTS.md:0-0
Timestamp: 2025-11-26T11:05:59.314Z
Learning: Applies to apps/shade/src/index.ts : Place new UI components under `src/components/ui` and export them from `src/index.ts`

Applied to files:

  • apps/admin-x-design-system/src/global/chrome/desktop-chrome-header.stories.tsx
  • apps/admin-x-design-system/src/global/banner.stories.tsx
  • apps/admin-x-design-system/src/global/layout/app-menu.tsx
  • apps/admin-x-design-system/src/global/menu.stories.tsx
  • apps/admin-x-design-system/src/design-system-app.tsx
  • apps/admin-x-design-system/src/global/sort-menu.tsx
  • apps/admin-x-design-system/src/global/tab-view.tsx
  • apps/admin-x-design-system/src/global/menu.tsx
  • apps/admin-x-design-system/src/global/layout/view-container.tsx
  • apps/admin-x-design-system/src/boilerplate.stories.tsx
  • apps/admin-x-design-system/src/global/form/select.stories.tsx
  • apps/admin-x-design-system/src/global/form/file-upload.stories.tsx
  • apps/admin-x-design-system/src/global/button.tsx
📚 Learning: 2025-11-26T11:05:59.314Z
Learnt from: CR
Repo: TryGhost/Ghost PR: 0
File: apps/shade/AGENTS.md:0-0
Timestamp: 2025-11-26T11:05:59.314Z
Learning: Applies to apps/shade/src/components/**/*.{ts,tsx} : Prefer compound subcomponents (e.g., `Header.Title`, `Header.Meta`, `Header.Actions`) for multi-region components instead of many props

Applied to files:

  • apps/admin-x-design-system/src/global/chrome/desktop-chrome-header.stories.tsx
  • apps/admin-x-design-system/src/global/banner.stories.tsx
  • apps/admin-x-design-system/src/global/modal/preview-modal.stories.tsx
  • apps/admin-x-design-system/src/global/layout/app-menu.tsx
  • apps/admin-x-design-system/src/global/tab-view.tsx
  • apps/admin-x-design-system/src/global/form/radio.tsx
  • apps/admin-x-design-system/src/global/menu.tsx
  • apps/admin-x-design-system/src/global/form/code-editor-view.tsx
  • apps/admin-x-design-system/src/global/layout/view-container.tsx
  • apps/admin-x-design-system/src/global/heading.tsx
📚 Learning: 2025-11-26T11:05:59.314Z
Learnt from: CR
Repo: TryGhost/Ghost PR: 0
File: apps/shade/AGENTS.md:0-0
Timestamp: 2025-11-26T11:05:59.314Z
Learning: Applies to apps/shade/src/components/ui/**/*.{ts,tsx} : Atomic UI components should be placed in `src/components/ui/*` and each component must have a corresponding `*.stories.tsx` file next to it for Storybook documentation

Applied to files:

  • apps/admin-x-design-system/src/global/chrome/desktop-chrome-header.stories.tsx
  • apps/admin-x-design-system/src/global/form/currency-field.stories.tsx
  • apps/admin-x-design-system/src/global/banner.stories.tsx
  • apps/admin-x-design-system/src/global/sortable-list.stories.tsx
  • apps/admin-x-design-system/src/global/modal/preview-modal.stories.tsx
  • apps/admin-x-design-system/src/global/layout/app-menu.tsx
  • apps/admin-x-design-system/src/global/menu.stories.tsx
  • apps/admin-x-design-system/src/global/no-value-label.stories.tsx
  • apps/admin-x-design-system/src/global/sort-menu.stories.tsx
  • apps/admin-x-design-system/src/global/tab-view.tsx
  • apps/admin-x-design-system/src/global/menu.tsx
  • apps/admin-x-design-system/src/global/popover.stories.tsx
  • apps/admin-x-design-system/src/global/modal/limit-modal.stories.tsx
  • apps/admin-x-design-system/src/global/layout/view-container.tsx
  • apps/admin-x-design-system/src/boilerplate.stories.tsx
  • apps/admin-x-design-system/src/global/form/multi-select.stories.tsx
  • apps/admin-x-design-system/src/global/form/url-text-field.stories.tsx
  • apps/admin-x-design-system/src/global/form/select.stories.tsx
  • apps/admin-x-design-system/src/global/form/checkbox.stories.tsx
  • apps/admin-x-design-system/src/global/form/text-field.stories.tsx
  • apps/admin-x-design-system/src/global/form/file-upload.stories.tsx
  • apps/admin-x-design-system/src/global/table-row.stories.tsx
  • apps/admin-x-design-system/src/global/form/toggle-group.stories.tsx
  • apps/admin-x-design-system/src/global/button-group.stories.tsx
  • apps/admin-x-design-system/src/global/button.tsx
  • apps/admin-x-design-system/src/global/table.stories.tsx
  • apps/admin-x-design-system/src/global/form/color-indicator.stories.tsx
📚 Learning: 2025-11-26T11:05:59.314Z
Learnt from: CR
Repo: TryGhost/Ghost PR: 0
File: apps/shade/AGENTS.md:0-0
Timestamp: 2025-11-26T11:05:59.314Z
Learning: Applies to apps/shade/src/**/*.{ts,tsx,js} : Use the `@` alias for internal imports (e.g., `@/lib/utils`)

Applied to files:

  • apps/admin-x-design-system/src/global/chrome/desktop-chrome-header.stories.tsx
  • apps/admin-x-design-system/src/global/form/image-upload.tsx
  • apps/admin-x-design-system/src/global/banner.stories.tsx
  • apps/admin-x-design-system/src/global/layout/app-menu.tsx
  • apps/admin-x-design-system/src/global/menu.stories.tsx
  • apps/admin-x-design-system/src/design-system-app.tsx
  • apps/admin-x-design-system/src/global/tab-view.tsx
  • apps/admin-x-design-system/src/global/menu.tsx
  • apps/admin-x-design-system/src/global/form/code-editor-view.tsx
  • apps/admin-x-design-system/src/boilerplate.stories.tsx
  • apps/admin-x-design-system/src/global/form/select.stories.tsx
  • apps/admin-x-design-system/src/global/form/file-upload.stories.tsx
  • apps/admin-x-design-system/src/global/button.tsx
  • apps/admin-x-design-system/src/global/heading.tsx
  • apps/admin-x-design-system/src/global/form/color-indicator.stories.tsx
📚 Learning: 2025-11-26T11:05:59.314Z
Learnt from: CR
Repo: TryGhost/Ghost PR: 0
File: apps/shade/AGENTS.md:0-0
Timestamp: 2025-11-26T11:05:59.314Z
Learning: Applies to apps/shade/src/**/*.{ts,tsx,js} : Use `camelCase` for function and variable names

Applied to files:

  • apps/admin-x-design-system/src/global/chrome/desktop-chrome-header.stories.tsx
  • apps/admin-x-design-system/src/global/tab-view.tsx
  • apps/admin-x-design-system/.eslintrc.cjs
📚 Learning: 2025-11-26T11:05:59.314Z
Learnt from: CR
Repo: TryGhost/Ghost PR: 0
File: apps/shade/AGENTS.md:0-0
Timestamp: 2025-11-26T11:05:59.314Z
Learning: Applies to apps/shade/src/components/layout/**/*.{ts,tsx} : Reusable layout containers (Page, Heading, Header, ViewHeader, ErrorPage) should be placed in `src/components/layout/*`

Applied to files:

  • apps/admin-x-design-system/src/global/chrome/desktop-chrome-header.stories.tsx
  • apps/admin-x-design-system/src/global/layout/app-menu.tsx
  • apps/admin-x-design-system/src/global/layout/global-actions.tsx
  • apps/admin-x-design-system/src/global/tab-view.tsx
  • apps/admin-x-design-system/src/global/layout/view-container.tsx
  • apps/admin-x-design-system/src/global/heading.tsx
📚 Learning: 2025-11-26T11:05:59.314Z
Learnt from: CR
Repo: TryGhost/Ghost PR: 0
File: apps/shade/AGENTS.md:0-0
Timestamp: 2025-11-26T11:05:59.314Z
Learning: Applies to apps/shade/**/*.stories.{ts,tsx} : Storybook stories should demonstrate key variants and states (sizes, disabled/loading, critical props) with minimal but representative examples

Applied to files:

  • apps/admin-x-design-system/src/global/chrome/desktop-chrome-header.stories.tsx
  • apps/admin-x-design-system/src/global/banner.stories.tsx
  • apps/admin-x-design-system/src/global/sortable-list.stories.tsx
  • apps/admin-x-design-system/src/global/modal/preview-modal.stories.tsx
  • apps/admin-x-design-system/src/global/menu.stories.tsx
  • apps/admin-x-design-system/src/global/no-value-label.stories.tsx
  • apps/admin-x-design-system/src/global/sort-menu.stories.tsx
  • apps/admin-x-design-system/src/global/popover.stories.tsx
  • apps/admin-x-design-system/src/global/modal/limit-modal.stories.tsx
  • apps/admin-x-design-system/src/boilerplate.stories.tsx
  • apps/admin-x-design-system/src/global/form/multi-select.stories.tsx
  • apps/admin-x-design-system/src/global/form/checkbox.stories.tsx
  • apps/admin-x-design-system/src/global/form/text-field.stories.tsx
  • apps/admin-x-design-system/src/global/table-row.stories.tsx
  • apps/admin-x-design-system/src/global/form/toggle-group.stories.tsx
  • apps/admin-x-design-system/src/global/button-group.stories.tsx
  • apps/admin-x-design-system/src/global/table.stories.tsx
  • apps/admin-x-design-system/src/global/form/color-indicator.stories.tsx
📚 Learning: 2025-11-26T11:05:59.314Z
Learnt from: CR
Repo: TryGhost/Ghost PR: 0
File: apps/shade/AGENTS.md:0-0
Timestamp: 2025-11-26T11:05:59.314Z
Learning: For new UI components, prioritize comprehensive Storybook stories; add focused unit tests where they provide real value (e.g., hooks, utils, logic-heavy parts)

Applied to files:

  • apps/admin-x-design-system/src/global/chrome/desktop-chrome-header.stories.tsx
  • apps/admin-x-design-system/src/global/no-value-label.stories.tsx
  • apps/admin-x-design-system/src/global/popover.stories.tsx
  • apps/admin-x-design-system/src/global/form/checkbox.stories.tsx
  • apps/admin-x-design-system/src/global/table-row.stories.tsx
  • apps/admin-x-design-system/src/global/form/toggle-group.stories.tsx
📚 Learning: 2025-11-26T11:05:59.314Z
Learnt from: CR
Repo: TryGhost/Ghost PR: 0
File: apps/shade/AGENTS.md:0-0
Timestamp: 2025-11-26T11:05:59.314Z
Learning: Applies to apps/shade/**/*.stories.{ts,tsx} : Storybook stories for new components should include an overview explaining what the component does and its primary use case

Applied to files:

  • apps/admin-x-design-system/src/global/banner.stories.tsx
  • apps/admin-x-design-system/src/global/modal/preview-modal.stories.tsx
  • apps/admin-x-design-system/src/global/no-value-label.stories.tsx
  • apps/admin-x-design-system/src/global/sort-menu.stories.tsx
  • apps/admin-x-design-system/src/boilerplate.stories.tsx
  • apps/admin-x-design-system/src/global/form/checkbox.stories.tsx
  • apps/admin-x-design-system/src/global/table-row.stories.tsx
  • apps/admin-x-design-system/src/global/form/toggle-group.stories.tsx
  • apps/admin-x-design-system/src/global/table.stories.tsx
📚 Learning: 2025-11-26T11:05:59.314Z
Learnt from: CR
Repo: TryGhost/Ghost PR: 0
File: apps/shade/AGENTS.md:0-0
Timestamp: 2025-11-26T11:05:59.314Z
Learning: Applies to apps/shade/src/components/features/**/*.{ts,tsx} : Higher-level, opinionated components (e.g., PostShareModal, SourceTabs) should be placed in `src/components/features/*`

Applied to files:

  • apps/admin-x-design-system/src/global/modal/preview-modal.stories.tsx
  • apps/admin-x-design-system/src/global/tab-view.tsx
  • apps/admin-x-design-system/src/global/layout/view-container.tsx
  • apps/admin-x-design-system/src/global/modal/preview-modal.tsx
📚 Learning: 2025-11-26T11:05:59.314Z
Learnt from: CR
Repo: TryGhost/Ghost PR: 0
File: apps/shade/AGENTS.md:0-0
Timestamp: 2025-11-26T11:05:59.314Z
Learning: Applies to apps/shade/src/components/**/*.{ts,tsx} : Use CVA (Class Variance Authority) for component variants when useful instead of heavy prop configuration

Applied to files:

  • apps/admin-x-design-system/src/global/modal/preview-modal.stories.tsx
  • apps/admin-x-design-system/src/global/button-group.tsx
  • apps/admin-x-design-system/src/global/form/color-picker-field.tsx
  • apps/admin-x-design-system/src/design-system-app.tsx
  • apps/admin-x-design-system/src/global/sort-menu.tsx
  • apps/admin-x-design-system/src/global/tab-view.tsx
  • apps/admin-x-design-system/src/global/form/radio.tsx
  • apps/admin-x-design-system/src/global/menu.tsx
  • apps/admin-x-design-system/src/global/layout/view-container.tsx
  • apps/admin-x-design-system/src/global/modal/preview-modal.tsx
  • apps/admin-x-design-system/src/global/form/checkbox.stories.tsx
  • apps/admin-x-design-system/src/global/form/color-picker.tsx
  • apps/admin-x-design-system/src/global/button.tsx
📚 Learning: 2025-11-25T14:28:50.351Z
Learnt from: CR
Repo: TryGhost/Ghost PR: 0
File: AGENTS.md:0-0
Timestamp: 2025-11-25T14:28:50.351Z
Learning: Ember admin uses `AdminXComponent` to dynamically import React apps with Suspense and error boundaries

Applied to files:

  • apps/admin-x-design-system/src/global/form/koenig-editor-base.tsx
📚 Learning: 2025-05-28T12:54:13.035Z
Learnt from: kevinansfield
Repo: TryGhost/Ghost PR: 23566
File: apps/admin-x-design-system/src/global/form/ColorIndicator.tsx:77-79
Timestamp: 2025-05-28T12:54:13.035Z
Learning: In the ColorIndicator component in apps/admin-x-design-system/src/global/form/ColorIndicator.tsx, the containerClassName prop is currently useless because it gets hardcoded to 'flex flex-col gap-3' instead of being merged with any passed-in className.

Applied to files:

  • apps/admin-x-design-system/src/global/form/color-picker-field.tsx
  • apps/admin-x-design-system/src/global/form/color-picker.tsx
  • apps/admin-x-design-system/src/global/form/color-indicator.stories.tsx
📚 Learning: 2025-11-24T17:29:43.865Z
Learnt from: CR
Repo: TryGhost/Ghost PR: 0
File: e2e/AGENTS.md:0-0
Timestamp: 2025-11-24T17:29:43.865Z
Learning: Applies to e2e/**/*.{ts,tsx} : Prefer less comments and give things clear names

Applied to files:

  • apps/admin-x-design-system/src/global/no-value-label.stories.tsx
📚 Learning: 2025-01-29T15:23:58.658Z
Learnt from: cathysarisky
Repo: TryGhost/Ghost PR: 21982
File: ghost/i18n/locales/hu v2/portal.json:70-70
Timestamp: 2025-01-29T15:23:58.658Z
Learning: Typos and spelling errors within localization files (ghost/i18n/locales/*.json) must be treated as important problems, not nitpicks, as they directly affect the user experience for speakers of that language. These issues should be flagged with high priority during code review.

Applied to files:

  • apps/admin-x-design-system/src/global/no-value-label.stories.tsx
📚 Learning: 2025-11-25T11:58:51.652Z
Learnt from: ibalosh
Repo: TryGhost/Ghost PR: 25525
File: apps/shade/src/shade-app.tsx:4-4
Timestamp: 2025-11-25T11:58:51.652Z
Learning: In apps/shade, the app wrapper file should be named `src/shade-app.tsx` (kebab-case) while the component itself is exported as `ShadeApp` (PascalCase). Context providers should be placed in `src/providers/*` using kebab-case filenames.

Applied to files:

  • apps/admin-x-design-system/src/design-system-app.tsx
  • apps/admin-x-design-system/src/global/layout/view-container.tsx
📚 Learning: 2025-11-26T11:05:59.314Z
Learnt from: CR
Repo: TryGhost/Ghost PR: 0
File: apps/shade/AGENTS.md:0-0
Timestamp: 2025-11-26T11:05:59.314Z
Learning: Applies to apps/shade/src/assets/**/*.{svg} : Logos and custom icon SVGs should be placed in `src/assets/*` with icons auto-exported via `Icon`

Applied to files:

  • apps/admin-x-design-system/src/global/tab-view.tsx
📚 Learning: 2025-10-23T07:35:27.719Z
Learnt from: jonatansberg
Repo: TryGhost/Ghost PR: 25227
File: apps/posts/src/views/Tags/components/TagsList.tsx:99-101
Timestamp: 2025-10-23T07:35:27.719Z
Learning: In the Shade library (apps/shade/src/components/ui/table.tsx), both TableRow and TableCell components include 'relative' positioning in their base className definitions by default, so explicit relative positioning may not be needed unless overriding with other position values like 'static'.

Applied to files:

  • apps/admin-x-design-system/src/global/table-row.stories.tsx
  • apps/admin-x-design-system/src/global/table.stories.tsx
📚 Learning: 2025-11-24T17:29:43.865Z
Learnt from: CR
Repo: TryGhost/Ghost PR: 0
File: e2e/AGENTS.md:0-0
Timestamp: 2025-11-24T17:29:43.865Z
Learning: Applies to e2e/**/*.test.ts : Test names should be lowercase and follow the format 'what is tested - expected outcome'

Applied to files:

  • apps/admin-x-design-system/src/global/table-row.stories.tsx
📚 Learning: 2025-11-26T11:05:59.314Z
Learnt from: CR
Repo: TryGhost/Ghost PR: 0
File: apps/shade/AGENTS.md:0-0
Timestamp: 2025-11-26T11:05:59.314Z
Learning: When changing tokens/config, verify Storybook and a library build still succeed

Applied to files:

  • apps/admin-x-design-system/src/global/form/toggle-group.stories.tsx
📚 Learning: 2025-11-26T11:05:59.314Z
Learnt from: CR
Repo: TryGhost/Ghost PR: 0
File: apps/shade/AGENTS.md:0-0
Timestamp: 2025-11-26T11:05:59.314Z
Learning: Applies to apps/shade/{src,test}/**/*.{ts,tsx,js} : Follow ESLint and `tailwindcss/*` plugin rules when writing styles

Applied to files:

  • apps/admin-x-design-system/.eslintrc.cjs
🧬 Code graph analysis (1)
apps/admin-x-design-system/src/global/layout/app-menu.tsx (1)
apps/shade/src/components/ui/pagemenu.tsx (1)
  • PageMenu (227-227)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (4)
  • GitHub Check: Admin-X Settings tests
  • GitHub Check: Unit tests (Node 22.18.0)
  • GitHub Check: Lint
  • GitHub Check: Build & Push
🔇 Additional comments (50)
apps/admin-x-design-system/src/boilerplate.stories.tsx (1)

3-3: Import path rename aligns with kebab-case convention

The updated import specifier ./boilerplate is consistent with the new filename convention and keeps the existing default export usage intact; no further changes needed here.

apps/admin-x-design-system/src/global/form/checkbox.stories.tsx (1)

4-4: Import path change aligns with kebab-case convention

Updating the import to ./checkbox cleanly matches the new kebab-case filename convention while keeping the component identifier in PascalCase. No further changes needed here.

apps/admin-x-design-system/src/global/banner.stories.tsx (1)

3-3: Import path casing update matches the new filename convention

Switching the import to ./banner is consistent with the kebab-/lower-case filename convention and should be a no-op for runtime behavior, assuming the underlying file has been renamed accordingly.

apps/admin-x-design-system/src/global/form/toggle-group.stories.tsx (1)

3-4: Kebab-case import updates look consistent with the PR goal

Imports now correctly point to ./toggle and ./toggle-group in kebab-case, with no change to component usage or Storybook config. This is aligned with the stated migration and should be safe on case-sensitive filesystems.

apps/admin-x-design-system/src/global/form/image-upload.tsx (1)

3-4: Imports correctly updated to kebab-case paths

The Icon and FileUpload imports now point to ../icon and ./file-upload, matching the new kebab-case filename convention without changing runtime behavior. Looks good and consistent with the PR’s objectives.

apps/admin-x-design-system/src/global/form/file-upload.stories.tsx (1)

3-3: Import rename correctly aligned with kebab-case convention

The updated import specifier ./file-upload matches the new kebab-case filename while keeping the FileUpload component API intact in this story. No issues from this change.

apps/admin-x-design-system/src/global/no-value-label.stories.tsx (1)

3-4: LGTM! Previous issues have been addressed.

All changes look good:

  • Import paths now correctly use kebab-case (./list, ./no-value-label) matching the PR's filename convention standardization.
  • The typo has been fixed in both story instances ("No available entry").
  • EOF handling is proper.

Also applies to: 18-18, 25-25, 34-34

apps/admin-x-design-system/src/global/form/koenig-editor-base.tsx (1)

3-4: Import path updates are correct and aligned with kebab-case convention

Switching to design-system-provider and error-boundary keeps usage unchanged while matching the new filename standard. No behavioral or typing concerns from this change alone.

apps/admin-x-design-system/src/global/form/url-text-field.stories.tsx (1)

4-4: LGTM! Import path correctly updated to kebab-case.

The import path has been properly updated to reflect the kebab-case filename convention while maintaining the correct PascalCase component identifier. This aligns with the PR's objective to standardize filenames.

apps/admin-x-design-system/src/global/form/currency-field.tsx (1)

2-2: LGTM! Import path correctly updated to kebab-case.

The import path change from './TextField' to './text-field' aligns with the PR objective to standardize on kebab-case naming conventions.

apps/admin-x-design-system/src/global/form/currency-field.stories.tsx (1)

5-5: LGTM! Story import correctly updated to kebab-case.

The import path change from './CurrencyField' to './currency-field' aligns with the PR objective to standardize on kebab-case naming conventions.

apps/admin-x-design-system/src/global/layout/global-actions.tsx (1)

2-10: LGTM! Clean refactor to kebab-case.

The import path update and EOF newline addition align perfectly with the PR objectives. The component identifier correctly remains PascalCase while the file path moves to kebab-case.

apps/admin-x-design-system/src/global/form/multi-select.stories.tsx (1)

4-4: LGTM! Import path correctly updated to kebab-case.

The import path has been properly updated to match the renamed file, while correctly preserving the PascalCase component identifier. This change aligns with the repository's kebab-case filename convention.

apps/admin-x-design-system/src/design-system-app.tsx (1)

3-4: LGTM! Import paths correctly updated to kebab-case.

The import path updates align with the PR objective to standardize filenames to kebab-case while maintaining the original PascalCase exports.

apps/admin-x-design-system/src/global/pagination.tsx (2)

2-3: Kebab-case import paths and Icon casing alignment look correct

The updated imports to ../hooks/use-pagination and ./icon match the kebab-case convention and keep the same types/components, so this looks good.


19-21: Icon sizing class simplification preserves behavior

Switching from separate h/w utilities to size-[10px] keeps the icons at 10×10 while reusing the existing enabled/disabled styling logic, so behavior remains unchanged.

apps/admin-x-design-system/src/global/pagination.stories.tsx (1)

3-3: Story import updated to kebab-case component file

The story now importing from ./pagination correctly tracks the renamed component file without changing the stories’ behavior.

apps/admin-x-design-system/src/global/heading.tsx (1)

3-3: LGTM! Import path updated to kebab-case.

The import path change from './Separator' to './separator' aligns with the kebab-case naming convention being adopted across the design system.

apps/admin-x-design-system/src/global/modal/modal-page.tsx (1)

3-3: LGTM! Import path updated to kebab-case.

The import path change aligns with the repository-wide migration to kebab-case filenames.

apps/admin-x-design-system/src/global/tab-view.tsx (1)

4-4: LGTM! Import path updated to kebab-case.

The import path change is consistent with the kebab-case naming convention.

apps/admin-x-design-system/src/global/sortable-list.stories.tsx (1)

4-4: LGTM! Import path updated to kebab-case.

The import path change aligns with the kebab-case naming convention for the component file.

apps/admin-x-design-system/src/global/form/html-field.tsx (1)

1-3: LGTM! Import paths updated to kebab-case.

All three import path changes (Heading, Hint, HtmlEditor) are consistent with the kebab-case naming convention being adopted.

apps/admin-x-design-system/src/global/layout/view-container.tsx (1)

2-7: LGTM! Import paths updated to kebab-case.

All five import path changes are consistent with the kebab-case naming convention. The refactoring maintains the same module exports and runtime behavior.

apps/admin-x-design-system/src/global/form/text-field.stories.tsx (1)

5-7: LGTM! Import paths updated to kebab-case.

All three import path changes in the story file are consistent with the kebab-case naming convention.

apps/admin-x-design-system/.eslintrc.cjs (1)

33-34: ESLint rule correctly configured to enforce kebab-case filenames.

The pattern ^[a-z0-9.-]+$ properly enforces lowercase alphanumeric characters with hyphens and dots (for file extensions), and the third parameter false ensures the rule applies to all files. This configuration is consistent across the Ghost codebase and appropriate for the design system.

apps/admin-x-design-system/src/global/form/radio.tsx (1)

2-4: LGTM! Clean refactoring to kebab-case with modern Tailwind utilities.

The import path updates align with the repository's kebab-case naming convention, and the Tailwind utility changes (size-4 instead of h-4 w-4, after:size-[6px] instead of separate height/width) use more concise modern tokens while maintaining identical rendering.

Also applies to: 31-32

apps/admin-x-design-system/src/global/menu.tsx (1)

2-3: LGTM! Import paths correctly updated to kebab-case.

apps/admin-x-design-system/src/global/button-group.stories.tsx (1)

3-4: LGTM! Import paths and formatting updated correctly.

Also applies to: 61-61

apps/admin-x-design-system/src/global/form/color-picker.tsx (1)

5-5: LGTM! Import path correctly updated to kebab-case.

apps/admin-x-design-system/src/global/form/color-indicator.stories.tsx (1)

3-3: LGTM! Import path correctly updated to kebab-case.

apps/admin-x-design-system/src/global/button.tsx (1)

1-1: LGTM! Import paths correctly updated to kebab-case.

Also applies to: 4-4

apps/admin-x-design-system/src/global/layout/app-menu.tsx (1)

2-2: LGTM! Import path and formatting updated correctly.

Also applies to: 12-12

apps/admin-x-design-system/src/global/form/color-picker-field.tsx (1)

4-6: LGTM! Import paths correctly updated to kebab-case.

apps/admin-x-design-system/src/global/form/select.stories.tsx (1)

5-5: LGTM! Import path updated correctly.

The import path change from './Select' to './select' correctly reflects the renamed file and aligns with the kebab-case convention established in this PR.

apps/admin-x-design-system/src/global/modal/limit-modal.stories.tsx (1)

5-6: LGTM! Import paths updated correctly.

Both import paths have been updated to kebab-case ('../button' and './limit-modal'), correctly aligning with the renamed files.

apps/admin-x-design-system/src/global/popover.stories.tsx (1)

4-5: LGTM! Import paths updated correctly.

Import paths have been consistently updated to kebab-case format, matching the renamed component files.

apps/admin-x-design-system/src/global/sort-menu.stories.tsx (1)

3-3: LGTM! Import path updated correctly.

The import path change from './SortMenu' to './sort-menu' correctly reflects the kebab-case naming convention.

apps/admin-x-design-system/src/global/form/select.tsx (1)

5-8: LGTM! All import paths updated correctly.

All four import paths have been consistently updated to kebab-case format:

  • design-system-provider
  • heading
  • hint
  • icon

These changes correctly align with the renamed files and maintain functionality.

apps/admin-x-design-system/src/global/chrome/desktop-chrome-header.stories.tsx (1)

3-6: LGTM! Import paths updated correctly.

All import paths have been consistently updated to kebab-case:

  • '../button'
  • '../button-group'
  • './desktop-chrome-header'
  • '../form/select'

The changes correctly reflect the renamed files.

apps/admin-x-design-system/src/global/menu.stories.tsx (1)

3-4: LGTM! Import paths updated correctly.

Both import paths have been updated to kebab-case format ('./button' and './menu'), aligning with the renamed files.

apps/admin-x-design-system/src/global/button-group.tsx (2)

2-5: LGTM! Import paths updated correctly.

All import paths have been consistently updated to kebab-case:

  • './button'
  • './tooltip'

The changes correctly reflect the renamed files.


57-57: Minor formatting adjustment.

A space was added before the ternary operator for consistency. This is a cosmetic change with no functional impact.

apps/admin-x-design-system/src/global/modal/preview-modal.stories.tsx (1)

5-8: LGTM! Import paths correctly updated to kebab-case.

The import path changes align with the PR's objective to standardize filenames. All imports are correctly updated and remain functionally identical.

apps/admin-x-design-system/src/global/table-row.stories.tsx (1)

4-7: LGTM! Import paths correctly updated to kebab-case.

All table component imports are consistently updated to match the new filename convention.

apps/admin-x-design-system/src/global/sort-menu.tsx (2)

2-3: LGTM! Import paths correctly updated to kebab-case.

Button and Popover imports now use the standardized lowercase module paths.


77-77: LGTM! Tailwind utility consolidated.

The change from h-6 w-6 to size-6 is functionally equivalent and uses the more concise Tailwind sizing utility.

apps/admin-x-design-system/src/global/table.stories.tsx (1)

5-10: LGTM! Import paths correctly updated to kebab-case.

All table-related component and story imports are consistently updated to the new filename convention.

apps/admin-x-design-system/src/global/modal/preview-modal.tsx (2)

4-15: LGTM! Import paths correctly updated to kebab-case.

All imports are consistently updated to the new filename convention, including hooks, components, and module references. The changes maintain correct functionality while aligning with the standardized naming scheme.


283-283: LGTM! Tailwind utility consolidated.

The change from h-full w-full to size-full is functionally equivalent and uses the more concise Tailwind sizing utility.

apps/admin-x-design-system/src/global/form/code-editor-view.tsx (1)

5-7: Imports now correctly follow kebab-case paths

The updated imports for useFocusContext, Heading, and Hint point to kebab-case/lowercase paths and are consistent with the PR’s filename convention changes. No issues from a runtime or typing standpoint as long as those modules still export the same symbols.


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
apps/admin-x-design-system/src/global/button.tsx (1)

141-151: Fix concatenated label classes when both hideLabel and loading are true

The current concatenation:

let labelClasses = '';
labelClasses += (label && hideLabel) ? 'sr-only' : '';
labelClasses += loading ? 'invisible' : '';

produces "sr-onlyinvisible" (no space) when both hideLabel and loading are true, so neither Tailwind class applies correctly.

You can avoid this by using clsx (already imported) instead of manual string concatenation:

-    let labelClasses = '';
-    labelClasses += (label && hideLabel) ? 'sr-only' : '';
-    labelClasses += loading ? 'invisible' : '';
+    const labelClasses = clsx(
+        label && hideLabel && 'sr-only',
+        loading && 'invisible'
+    );

This keeps the semantics identical but ensures valid class names in all combinations.

🧹 Nitpick comments (1)
apps/admin-x-design-system/src/global/sort-menu.tsx (1)

2-3: Imports align with kebab-case; consider refactoring nested button

The imports from ./button and ./popover plus the size-6 class update are consistent with the new kebab-case/file-size conventions and don’t alter SortMenu behavior.

Unrelated to the rename, the sort-direction control is currently rendered as a <button> nested inside the outer <button> row (lines 71–79), which is invalid HTML and can confuse browsers/screen readers. When you next touch this component, consider refactoring so there’s only a single actual button per row (e.g., wrap the inner control in a non-interactive element or move it outside the row button).

Also applies to: 70-80

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 236f908 and 1f4ef6b.

📒 Files selected for processing (107)
  • apps/admin-x-design-system/.eslintrc.cjs (1 hunks)
  • apps/admin-x-design-system/.storybook/preview.tsx (1 hunks)
  • apps/admin-x-design-system/README.md (0 hunks)
  • apps/admin-x-design-system/src/boilerplate.stories.tsx (1 hunks)
  • apps/admin-x-design-system/src/design-system-app.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/avatar.stories.tsx (2 hunks)
  • apps/admin-x-design-system/src/global/banner.stories.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/breadcrumbs.stories.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/breadcrumbs.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/button-group.stories.tsx (2 hunks)
  • apps/admin-x-design-system/src/global/button-group.tsx (2 hunks)
  • apps/admin-x-design-system/src/global/button.stories.tsx (2 hunks)
  • apps/admin-x-design-system/src/global/button.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/chrome/desktop-chrome-header.stories.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/chrome/desktop-chrome.stories.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/chrome/mobile-chrome.stories.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/error-boundary.stories.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/error-boundary.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/form/checkbox-group.stories.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/form/checkbox-group.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/form/checkbox.stories.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/form/checkbox.tsx (2 hunks)
  • apps/admin-x-design-system/src/global/form/code-editor-view.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/form/code-editor.stories.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/form/code-editor.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/form/color-indicator.stories.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/form/color-indicator.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/form/color-picker-field.stories.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/form/color-picker-field.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/form/color-picker.stories.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/form/color-picker.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/form/currency-field.stories.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/form/currency-field.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/form/file-upload.stories.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/form/form.stories.tsx (2 hunks)
  • apps/admin-x-design-system/src/global/form/form.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/form/html-editor.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/form/html-field.stories.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/form/html-field.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/form/image-upload.stories.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/form/image-upload.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/form/multi-select.stories.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/form/multi-select.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/form/radio.stories.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/form/radio.tsx (2 hunks)
  • apps/admin-x-design-system/src/global/form/select.stories.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/form/select.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/form/text-area.stories.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/form/text-area.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/form/text-field.stories.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/form/text-field.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/form/toggle-group.stories.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/form/toggle.stories.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/form/toggle.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/form/url-text-field.stories.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/form/url-text-field.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/heading.stories.tsx (2 hunks)
  • apps/admin-x-design-system/src/global/heading.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/hint.stories.tsx (2 hunks)
  • apps/admin-x-design-system/src/global/icon-label.stories.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/icon-label.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/icon.stories.tsx (2 hunks)
  • apps/admin-x-design-system/src/global/infinite-scroll-listener.stories.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/layout/app-menu.tsx (2 hunks)
  • apps/admin-x-design-system/src/global/layout/global-actions.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/layout/page-header.stories.tsx (2 hunks)
  • apps/admin-x-design-system/src/global/layout/page.stories.tsx (4 hunks)
  • apps/admin-x-design-system/src/global/layout/page.tsx (2 hunks)
  • apps/admin-x-design-system/src/global/layout/view-container.stories.tsx (2 hunks)
  • apps/admin-x-design-system/src/global/layout/view-container.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/link.stories.tsx (2 hunks)
  • apps/admin-x-design-system/src/global/list-heading.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/list-item.stories.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/list.stories.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/list.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/loading-indicator.stories.tsx (3 hunks)
  • apps/admin-x-design-system/src/global/menu.stories.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/menu.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/modal/confirmation-modal.stories.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/modal/confirmation-modal.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/modal/limit-modal.stories.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/modal/limit-modal.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/modal/modal-page.stories.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/modal/modal-page.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/modal/modal.stories.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/modal/modal.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/modal/preview-modal.stories.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/modal/preview-modal.tsx (2 hunks)
  • apps/admin-x-design-system/src/global/no-value-label.stories.tsx (2 hunks)
  • apps/admin-x-design-system/src/global/no-value-label.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/pagination.stories.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/pagination.tsx (2 hunks)
  • apps/admin-x-design-system/src/global/popover.stories.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/separator.stories.tsx (2 hunks)
  • apps/admin-x-design-system/src/global/sort-menu.stories.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/sort-menu.tsx (2 hunks)
  • apps/admin-x-design-system/src/global/sortable-list.stories.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/sortable-list.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/sticky-footer.stories.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/tab-view.stories.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/tab-view.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/table-head.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/table-row.stories.tsx (2 hunks)
  • apps/admin-x-design-system/src/global/table.stories.tsx (2 hunks)
  • apps/admin-x-design-system/src/global/table.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/table/dynamic-table.stories.tsx (2 hunks)
  • apps/admin-x-design-system/src/global/table/dynamic-table.tsx (1 hunks)
⛔ Files not processed due to max files limit (26)
  • apps/admin-x-design-system/src/global/toast.stories.tsx
  • apps/admin-x-design-system/src/global/toast.tsx
  • apps/admin-x-design-system/src/global/tooltip.stories.tsx
  • apps/admin-x-design-system/src/index.ts
  • apps/admin-x-design-system/src/providers/design-system-provider.tsx
  • apps/admin-x-design-system/src/settings/setting-group-content.stories.tsx
  • apps/admin-x-design-system/src/settings/setting-group-content.tsx
  • apps/admin-x-design-system/src/settings/setting-group-header.stories.tsx
  • apps/admin-x-design-system/src/settings/setting-group-header.tsx
  • apps/admin-x-design-system/src/settings/setting-group.stories.tsx
  • apps/admin-x-design-system/src/settings/setting-group.tsx
  • apps/admin-x-design-system/src/settings/setting-nav-item.stories.tsx
  • apps/admin-x-design-system/src/settings/setting-nav-item.tsx
  • apps/admin-x-design-system/src/settings/setting-nav-section.stories.tsx
  • apps/admin-x-design-system/src/settings/setting-section-header.stories.tsx
  • apps/admin-x-design-system/src/settings/setting-section.stories.tsx
  • apps/admin-x-design-system/src/settings/setting-section.tsx
  • apps/admin-x-design-system/src/settings/setting-value.stories.tsx
  • apps/admin-x-design-system/src/settings/setting-value.tsx
  • apps/admin-x-design-system/src/settings/stripe-button.stories.tsx
  • apps/admin-x-design-system/src/settings/stripe-button.tsx
  • apps/admin-x-design-system/src/utils/modals.tsx
  • apps/admin-x-design-system/test/.eslintrc.cjs
  • apps/admin-x-design-system/test/unit/hooks/use-pagination.test.ts
  • apps/admin-x-design-system/test/unit/hooks/use-sortable-indexed-list.test.ts
  • apps/admin-x-design-system/test/unit/utils/format-url.test.ts
💤 Files with no reviewable changes (1)
  • apps/admin-x-design-system/README.md
🧰 Additional context used
🧠 Learnings (28)
📓 Common learnings
Learnt from: CR
Repo: TryGhost/Ghost PR: 0
File: apps/shade/AGENTS.md:0-0
Timestamp: 2025-11-26T11:05:59.314Z
Learning: Applies to apps/shade/src/components/**/*.{ts,tsx} : Use `PascalCase` for component identifiers in filenames while keeping ShadCN-generated files in kebab-case
Learnt from: CR
Repo: TryGhost/Ghost PR: 0
File: apps/shade/AGENTS.md:0-0
Timestamp: 2025-11-26T11:05:59.314Z
Learning: Applies to apps/shade/src/**/*.{ts,tsx,js} : Use `camelCase` for function and variable names
Learnt from: ibalosh
Repo: TryGhost/Ghost PR: 25525
File: apps/shade/src/shade-app.tsx:4-4
Timestamp: 2025-11-25T11:58:51.652Z
Learning: In apps/shade, the app wrapper file should be named `src/shade-app.tsx` (kebab-case) while the component itself is exported as `ShadeApp` (PascalCase). Context providers should be placed in `src/providers/*` using kebab-case filenames.
📚 Learning: 2025-11-26T11:05:59.314Z
Learnt from: CR
Repo: TryGhost/Ghost PR: 0
File: apps/shade/AGENTS.md:0-0
Timestamp: 2025-11-26T11:05:59.314Z
Learning: Applies to apps/shade/src/components/ui/**/*.{ts,tsx} : Atomic UI components should be placed in `src/components/ui/*` and each component must have a corresponding `*.stories.tsx` file next to it for Storybook documentation

Applied to files:

  • apps/admin-x-design-system/src/global/popover.stories.tsx
  • apps/admin-x-design-system/src/global/banner.stories.tsx
  • apps/admin-x-design-system/src/global/chrome/desktop-chrome-header.stories.tsx
  • apps/admin-x-design-system/src/global/form/select.stories.tsx
  • apps/admin-x-design-system/src/global/breadcrumbs.stories.tsx
  • apps/admin-x-design-system/src/global/tab-view.stories.tsx
  • apps/admin-x-design-system/src/global/menu.stories.tsx
  • apps/admin-x-design-system/.storybook/preview.tsx
  • apps/admin-x-design-system/src/global/chrome/desktop-chrome.stories.tsx
  • apps/admin-x-design-system/src/global/modal/modal-page.stories.tsx
  • apps/admin-x-design-system/src/global/pagination.stories.tsx
  • apps/admin-x-design-system/src/global/modal/modal.stories.tsx
  • apps/admin-x-design-system/src/global/form/checkbox-group.stories.tsx
  • apps/admin-x-design-system/src/global/form/file-upload.stories.tsx
  • apps/admin-x-design-system/src/global/list.stories.tsx
  • apps/admin-x-design-system/src/global/layout/app-menu.tsx
  • apps/admin-x-design-system/src/global/modal/preview-modal.stories.tsx
  • apps/admin-x-design-system/src/global/form/color-picker.stories.tsx
  • apps/admin-x-design-system/src/global/menu.tsx
  • apps/admin-x-design-system/src/global/form/toggle-group.stories.tsx
  • apps/admin-x-design-system/src/global/modal/confirmation-modal.stories.tsx
  • apps/admin-x-design-system/src/global/table-row.stories.tsx
  • apps/admin-x-design-system/src/global/form/radio.stories.tsx
  • apps/admin-x-design-system/src/boilerplate.stories.tsx
  • apps/admin-x-design-system/src/global/button-group.stories.tsx
  • apps/admin-x-design-system/src/global/button.tsx
  • apps/admin-x-design-system/src/global/error-boundary.stories.tsx
  • apps/admin-x-design-system/src/global/layout/view-container.tsx
  • apps/admin-x-design-system/src/global/form/image-upload.stories.tsx
  • apps/admin-x-design-system/src/global/form/code-editor.stories.tsx
  • apps/admin-x-design-system/src/global/modal/limit-modal.stories.tsx
  • apps/admin-x-design-system/src/global/layout/view-container.stories.tsx
  • apps/admin-x-design-system/src/global/infinite-scroll-listener.stories.tsx
  • apps/admin-x-design-system/src/global/form/url-text-field.stories.tsx
  • apps/admin-x-design-system/src/global/button.stories.tsx
  • apps/admin-x-design-system/src/global/no-value-label.stories.tsx
  • apps/admin-x-design-system/src/global/form/checkbox.stories.tsx
  • apps/admin-x-design-system/src/global/separator.stories.tsx
  • apps/admin-x-design-system/src/global/layout/page.tsx
  • apps/admin-x-design-system/src/global/table/dynamic-table.stories.tsx
  • apps/admin-x-design-system/src/global/form/color-picker-field.stories.tsx
  • apps/admin-x-design-system/src/global/layout/page.stories.tsx
  • apps/admin-x-design-system/src/global/list-item.stories.tsx
  • apps/admin-x-design-system/src/global/sort-menu.stories.tsx
  • apps/admin-x-design-system/src/global/table.stories.tsx
  • apps/admin-x-design-system/src/global/form/html-field.stories.tsx
  • apps/admin-x-design-system/src/global/sticky-footer.stories.tsx
  • apps/admin-x-design-system/src/global/form/multi-select.stories.tsx
  • apps/admin-x-design-system/src/global/form/color-indicator.stories.tsx
  • apps/admin-x-design-system/src/global/form/form.stories.tsx
  • apps/admin-x-design-system/src/global/chrome/mobile-chrome.stories.tsx
  • apps/admin-x-design-system/src/global/icon.stories.tsx
  • apps/admin-x-design-system/src/global/layout/page-header.stories.tsx
  • apps/admin-x-design-system/src/global/form/text-field.stories.tsx
  • apps/admin-x-design-system/src/global/icon-label.stories.tsx
  • apps/admin-x-design-system/src/global/modal/modal.tsx
  • apps/admin-x-design-system/src/global/tab-view.tsx
  • apps/admin-x-design-system/src/global/form/toggle.stories.tsx
  • apps/admin-x-design-system/src/global/avatar.stories.tsx
  • apps/admin-x-design-system/src/global/link.stories.tsx
  • apps/admin-x-design-system/src/global/form/text-area.stories.tsx
  • apps/admin-x-design-system/src/global/loading-indicator.stories.tsx
  • apps/admin-x-design-system/src/global/sort-menu.tsx
📚 Learning: 2025-11-26T11:05:59.314Z
Learnt from: CR
Repo: TryGhost/Ghost PR: 0
File: apps/shade/AGENTS.md:0-0
Timestamp: 2025-11-26T11:05:59.314Z
Learning: Applies to apps/shade/src/components/**/*.{ts,tsx} : Use `PascalCase` for component identifiers in filenames while keeping ShadCN-generated files in kebab-case

Applied to files:

  • apps/admin-x-design-system/src/global/popover.stories.tsx
  • apps/admin-x-design-system/src/global/banner.stories.tsx
  • apps/admin-x-design-system/src/global/chrome/desktop-chrome-header.stories.tsx
  • apps/admin-x-design-system/src/global/tab-view.stories.tsx
  • apps/admin-x-design-system/src/global/menu.stories.tsx
  • apps/admin-x-design-system/src/global/form/text-field.tsx
  • apps/admin-x-design-system/src/global/form/checkbox.tsx
  • apps/admin-x-design-system/src/global/pagination.stories.tsx
  • apps/admin-x-design-system/src/global/modal/modal.stories.tsx
  • apps/admin-x-design-system/src/global/form/toggle.tsx
  • apps/admin-x-design-system/src/global/form/image-upload.tsx
  • apps/admin-x-design-system/src/global/list.stories.tsx
  • apps/admin-x-design-system/src/global/layout/app-menu.tsx
  • apps/admin-x-design-system/src/global/modal/preview-modal.stories.tsx
  • apps/admin-x-design-system/src/global/form/text-area.tsx
  • apps/admin-x-design-system/src/global/form/color-picker.stories.tsx
  • apps/admin-x-design-system/src/global/menu.tsx
  • apps/admin-x-design-system/src/global/form/html-field.tsx
  • apps/admin-x-design-system/src/global/form/toggle-group.stories.tsx
  • apps/admin-x-design-system/.eslintrc.cjs
  • apps/admin-x-design-system/src/global/table-row.stories.tsx
  • apps/admin-x-design-system/src/global/form/form.tsx
  • apps/admin-x-design-system/src/global/table.tsx
  • apps/admin-x-design-system/src/global/layout/global-actions.tsx
  • apps/admin-x-design-system/src/global/button.tsx
  • apps/admin-x-design-system/src/global/sortable-list.tsx
  • apps/admin-x-design-system/src/global/layout/view-container.tsx
  • apps/admin-x-design-system/src/global/form/code-editor.stories.tsx
  • apps/admin-x-design-system/src/global/no-value-label.stories.tsx
  • apps/admin-x-design-system/src/global/separator.stories.tsx
  • apps/admin-x-design-system/src/global/form/radio.tsx
  • apps/admin-x-design-system/src/global/layout/page.tsx
  • apps/admin-x-design-system/src/global/form/color-picker-field.stories.tsx
  • apps/admin-x-design-system/src/global/form/code-editor.tsx
  • apps/admin-x-design-system/src/global/layout/page.stories.tsx
  • apps/admin-x-design-system/src/global/list-item.stories.tsx
  • apps/admin-x-design-system/src/global/table.stories.tsx
  • apps/admin-x-design-system/src/global/list.tsx
  • apps/admin-x-design-system/src/global/form/multi-select.tsx
  • apps/admin-x-design-system/src/global/form/form.stories.tsx
  • apps/admin-x-design-system/src/global/chrome/mobile-chrome.stories.tsx
  • apps/admin-x-design-system/src/global/layout/page-header.stories.tsx
  • apps/admin-x-design-system/src/global/form/text-field.stories.tsx
  • apps/admin-x-design-system/src/global/icon-label.stories.tsx
  • apps/admin-x-design-system/src/design-system-app.tsx
  • apps/admin-x-design-system/src/global/table-head.tsx
  • apps/admin-x-design-system/src/global/modal/modal.tsx
  • apps/admin-x-design-system/src/global/tab-view.tsx
  • apps/admin-x-design-system/src/global/heading.tsx
  • apps/admin-x-design-system/src/global/form/toggle.stories.tsx
  • apps/admin-x-design-system/src/global/icon-label.tsx
  • apps/admin-x-design-system/src/global/list-heading.tsx
  • apps/admin-x-design-system/src/global/form/checkbox-group.tsx
  • apps/admin-x-design-system/src/global/sort-menu.tsx
  • apps/admin-x-design-system/src/global/modal/preview-modal.tsx
  • apps/admin-x-design-system/src/global/form/color-picker-field.tsx
📚 Learning: 2025-11-26T11:05:59.314Z
Learnt from: CR
Repo: TryGhost/Ghost PR: 0
File: apps/shade/AGENTS.md:0-0
Timestamp: 2025-11-26T11:05:59.314Z
Learning: Applies to apps/shade/**/*.stories.{ts,tsx} : Storybook stories should demonstrate key variants and states (sizes, disabled/loading, critical props) with minimal but representative examples

Applied to files:

  • apps/admin-x-design-system/src/global/popover.stories.tsx
  • apps/admin-x-design-system/src/global/chrome/desktop-chrome-header.stories.tsx
  • apps/admin-x-design-system/src/global/breadcrumbs.stories.tsx
  • apps/admin-x-design-system/src/global/tab-view.stories.tsx
  • apps/admin-x-design-system/src/global/menu.stories.tsx
  • apps/admin-x-design-system/.storybook/preview.tsx
  • apps/admin-x-design-system/src/global/chrome/desktop-chrome.stories.tsx
  • apps/admin-x-design-system/src/global/modal/modal-page.stories.tsx
  • apps/admin-x-design-system/src/global/modal/modal.stories.tsx
  • apps/admin-x-design-system/src/global/form/checkbox-group.stories.tsx
  • apps/admin-x-design-system/src/global/list.stories.tsx
  • apps/admin-x-design-system/src/global/modal/preview-modal.stories.tsx
  • apps/admin-x-design-system/src/global/form/color-picker.stories.tsx
  • apps/admin-x-design-system/src/global/form/toggle-group.stories.tsx
  • apps/admin-x-design-system/src/global/modal/confirmation-modal.stories.tsx
  • apps/admin-x-design-system/src/global/table-row.stories.tsx
  • apps/admin-x-design-system/src/boilerplate.stories.tsx
  • apps/admin-x-design-system/src/global/button-group.stories.tsx
  • apps/admin-x-design-system/src/global/modal/limit-modal.stories.tsx
  • apps/admin-x-design-system/src/global/layout/view-container.stories.tsx
  • apps/admin-x-design-system/src/global/infinite-scroll-listener.stories.tsx
  • apps/admin-x-design-system/src/global/button.stories.tsx
  • apps/admin-x-design-system/src/global/no-value-label.stories.tsx
  • apps/admin-x-design-system/src/global/form/checkbox.stories.tsx
  • apps/admin-x-design-system/src/global/table/dynamic-table.stories.tsx
  • apps/admin-x-design-system/src/global/form/color-picker-field.stories.tsx
  • apps/admin-x-design-system/src/global/layout/page.stories.tsx
  • apps/admin-x-design-system/src/global/list-item.stories.tsx
  • apps/admin-x-design-system/src/global/sort-menu.stories.tsx
  • apps/admin-x-design-system/src/global/table.stories.tsx
  • apps/admin-x-design-system/src/global/sticky-footer.stories.tsx
  • apps/admin-x-design-system/src/global/form/multi-select.stories.tsx
  • apps/admin-x-design-system/src/global/form/color-indicator.stories.tsx
  • apps/admin-x-design-system/src/global/form/form.stories.tsx
  • apps/admin-x-design-system/src/global/icon.stories.tsx
  • apps/admin-x-design-system/src/global/form/text-field.stories.tsx
  • apps/admin-x-design-system/src/global/icon-label.stories.tsx
  • apps/admin-x-design-system/src/global/form/toggle.stories.tsx
  • apps/admin-x-design-system/src/global/loading-indicator.stories.tsx
📚 Learning: 2025-11-26T11:05:59.314Z
Learnt from: CR
Repo: TryGhost/Ghost PR: 0
File: apps/shade/AGENTS.md:0-0
Timestamp: 2025-11-26T11:05:59.314Z
Learning: Applies to apps/shade/src/index.ts : Place new UI components under `src/components/ui` and export them from `src/index.ts`

Applied to files:

  • apps/admin-x-design-system/src/global/popover.stories.tsx
  • apps/admin-x-design-system/src/global/banner.stories.tsx
  • apps/admin-x-design-system/src/global/chrome/desktop-chrome-header.stories.tsx
  • apps/admin-x-design-system/src/global/form/select.stories.tsx
  • apps/admin-x-design-system/src/global/tab-view.stories.tsx
  • apps/admin-x-design-system/src/global/menu.stories.tsx
  • apps/admin-x-design-system/src/global/button-group.tsx
  • apps/admin-x-design-system/src/global/layout/app-menu.tsx
  • apps/admin-x-design-system/src/global/modal/preview-modal.stories.tsx
  • apps/admin-x-design-system/src/global/form/color-picker.stories.tsx
  • apps/admin-x-design-system/src/global/menu.tsx
  • apps/admin-x-design-system/src/global/form/toggle-group.stories.tsx
  • apps/admin-x-design-system/src/global/form/form.tsx
  • apps/admin-x-design-system/src/global/layout/global-actions.tsx
  • apps/admin-x-design-system/src/global/button.tsx
  • apps/admin-x-design-system/src/global/sortable-list.tsx
  • apps/admin-x-design-system/src/global/layout/view-container.tsx
  • apps/admin-x-design-system/src/global/layout/view-container.stories.tsx
  • apps/admin-x-design-system/src/global/form/color-indicator.tsx
  • apps/admin-x-design-system/src/global/layout/page.tsx
  • apps/admin-x-design-system/src/global/form/color-picker.tsx
  • apps/admin-x-design-system/src/global/layout/page.stories.tsx
  • apps/admin-x-design-system/src/global/form/multi-select.tsx
  • apps/admin-x-design-system/src/global/form/html-field.stories.tsx
  • apps/admin-x-design-system/src/global/icon-label.stories.tsx
  • apps/admin-x-design-system/src/design-system-app.tsx
  • apps/admin-x-design-system/src/global/modal/modal.tsx
  • apps/admin-x-design-system/src/global/tab-view.tsx
  • apps/admin-x-design-system/src/global/icon-label.tsx
  • apps/admin-x-design-system/src/global/list-heading.tsx
  • apps/admin-x-design-system/src/global/sort-menu.tsx
  • apps/admin-x-design-system/src/global/modal/preview-modal.tsx
  • apps/admin-x-design-system/src/global/form/color-picker-field.tsx
📚 Learning: 2025-11-26T11:05:59.314Z
Learnt from: CR
Repo: TryGhost/Ghost PR: 0
File: apps/shade/AGENTS.md:0-0
Timestamp: 2025-11-26T11:05:59.314Z
Learning: For new UI components, prioritize comprehensive Storybook stories; add focused unit tests where they provide real value (e.g., hooks, utils, logic-heavy parts)

Applied to files:

  • apps/admin-x-design-system/src/global/popover.stories.tsx
  • apps/admin-x-design-system/src/global/chrome/desktop-chrome-header.stories.tsx
  • apps/admin-x-design-system/src/global/modal/modal-page.stories.tsx
  • apps/admin-x-design-system/src/global/list.stories.tsx
  • apps/admin-x-design-system/src/global/form/toggle-group.stories.tsx
  • apps/admin-x-design-system/src/global/table-row.stories.tsx
  • apps/admin-x-design-system/src/global/layout/view-container.stories.tsx
  • apps/admin-x-design-system/src/global/button.stories.tsx
  • apps/admin-x-design-system/src/global/form/checkbox.stories.tsx
  • apps/admin-x-design-system/src/global/layout/page.stories.tsx
  • apps/admin-x-design-system/src/global/form/color-indicator.stories.tsx
  • apps/admin-x-design-system/src/global/form/form.stories.tsx
📚 Learning: 2025-11-26T11:05:59.314Z
Learnt from: CR
Repo: TryGhost/Ghost PR: 0
File: apps/shade/AGENTS.md:0-0
Timestamp: 2025-11-26T11:05:59.314Z
Learning: Applies to apps/shade/src/**/*.{ts,tsx,js} : Use the `@` alias for internal imports (e.g., `@/lib/utils`)

Applied to files:

  • apps/admin-x-design-system/src/global/banner.stories.tsx
  • apps/admin-x-design-system/src/global/chrome/desktop-chrome-header.stories.tsx
  • apps/admin-x-design-system/src/global/form/select.stories.tsx
  • apps/admin-x-design-system/src/global/tab-view.stories.tsx
  • apps/admin-x-design-system/src/global/menu.stories.tsx
  • apps/admin-x-design-system/.storybook/preview.tsx
  • apps/admin-x-design-system/src/global/form/text-field.tsx
  • apps/admin-x-design-system/src/global/chrome/desktop-chrome.stories.tsx
  • apps/admin-x-design-system/src/global/form/image-upload.tsx
  • apps/admin-x-design-system/src/global/list.stories.tsx
  • apps/admin-x-design-system/src/global/layout/app-menu.tsx
  • apps/admin-x-design-system/src/global/form/text-area.tsx
  • apps/admin-x-design-system/src/global/form/color-picker.stories.tsx
  • apps/admin-x-design-system/src/global/error-boundary.tsx
  • apps/admin-x-design-system/src/global/menu.tsx
  • apps/admin-x-design-system/src/global/form/html-field.tsx
  • apps/admin-x-design-system/src/global/form/toggle-group.stories.tsx
  • apps/admin-x-design-system/src/global/form/form.tsx
  • apps/admin-x-design-system/src/global/form/html-editor.tsx
  • apps/admin-x-design-system/src/global/table.tsx
  • apps/admin-x-design-system/src/global/layout/global-actions.tsx
  • apps/admin-x-design-system/src/global/button.tsx
  • apps/admin-x-design-system/src/global/sortable-list.tsx
  • apps/admin-x-design-system/src/global/layout/view-container.tsx
  • apps/admin-x-design-system/src/global/form/image-upload.stories.tsx
  • apps/admin-x-design-system/src/global/form/code-editor.stories.tsx
  • apps/admin-x-design-system/src/global/layout/page.tsx
  • apps/admin-x-design-system/src/global/form/code-editor.tsx
  • apps/admin-x-design-system/src/global/form/color-picker.tsx
  • apps/admin-x-design-system/src/global/list-item.stories.tsx
  • apps/admin-x-design-system/src/global/list.tsx
  • apps/admin-x-design-system/src/global/form/multi-select.tsx
  • apps/admin-x-design-system/src/global/form/html-field.stories.tsx
  • apps/admin-x-design-system/src/global/sticky-footer.stories.tsx
  • apps/admin-x-design-system/src/global/form/code-editor-view.tsx
  • apps/admin-x-design-system/src/global/hint.stories.tsx
  • apps/admin-x-design-system/src/global/chrome/mobile-chrome.stories.tsx
  • apps/admin-x-design-system/src/global/icon.stories.tsx
  • apps/admin-x-design-system/src/global/icon-label.stories.tsx
  • apps/admin-x-design-system/src/design-system-app.tsx
  • apps/admin-x-design-system/src/global/table-head.tsx
  • apps/admin-x-design-system/src/global/modal/modal.tsx
  • apps/admin-x-design-system/src/global/tab-view.tsx
  • apps/admin-x-design-system/src/global/heading.tsx
  • apps/admin-x-design-system/src/global/form/toggle.stories.tsx
  • apps/admin-x-design-system/src/global/icon-label.tsx
  • apps/admin-x-design-system/src/global/link.stories.tsx
  • apps/admin-x-design-system/src/global/list-heading.tsx
  • apps/admin-x-design-system/src/global/form/text-area.stories.tsx
  • apps/admin-x-design-system/src/global/modal/preview-modal.tsx
  • apps/admin-x-design-system/src/global/form/color-picker-field.tsx
  • apps/admin-x-design-system/src/global/no-value-label.tsx
📚 Learning: 2025-11-26T11:05:59.314Z
Learnt from: CR
Repo: TryGhost/Ghost PR: 0
File: apps/shade/AGENTS.md:0-0
Timestamp: 2025-11-26T11:05:59.314Z
Learning: Applies to apps/shade/src/components/**/*.{ts,tsx} : Prefer compound subcomponents (e.g., `Header.Title`, `Header.Meta`, `Header.Actions`) for multi-region components instead of many props

Applied to files:

  • apps/admin-x-design-system/src/global/chrome/desktop-chrome-header.stories.tsx
  • apps/admin-x-design-system/src/global/form/text-field.tsx
  • apps/admin-x-design-system/src/global/form/checkbox.tsx
  • apps/admin-x-design-system/src/global/form/toggle.tsx
  • apps/admin-x-design-system/src/global/layout/app-menu.tsx
  • apps/admin-x-design-system/src/global/modal/preview-modal.stories.tsx
  • apps/admin-x-design-system/src/global/form/text-area.tsx
  • apps/admin-x-design-system/src/global/menu.tsx
  • apps/admin-x-design-system/src/global/form/html-field.tsx
  • apps/admin-x-design-system/src/global/form/form.tsx
  • apps/admin-x-design-system/src/global/layout/global-actions.tsx
  • apps/admin-x-design-system/src/global/sortable-list.tsx
  • apps/admin-x-design-system/src/global/layout/view-container.tsx
  • apps/admin-x-design-system/src/global/form/color-indicator.tsx
  • apps/admin-x-design-system/src/global/form/radio.tsx
  • apps/admin-x-design-system/src/global/layout/page.tsx
  • apps/admin-x-design-system/src/global/layout/page.stories.tsx
  • apps/admin-x-design-system/src/global/list.tsx
  • apps/admin-x-design-system/src/global/form/multi-select.tsx
  • apps/admin-x-design-system/src/global/layout/page-header.stories.tsx
  • apps/admin-x-design-system/src/global/icon-label.stories.tsx
  • apps/admin-x-design-system/src/global/table-head.tsx
  • apps/admin-x-design-system/src/global/modal/modal.tsx
  • apps/admin-x-design-system/src/global/heading.tsx
  • apps/admin-x-design-system/src/global/list-heading.tsx
  • apps/admin-x-design-system/src/global/form/checkbox-group.tsx
  • apps/admin-x-design-system/src/global/sort-menu.tsx
  • apps/admin-x-design-system/src/global/modal/preview-modal.tsx
📚 Learning: 2025-11-26T11:05:59.314Z
Learnt from: CR
Repo: TryGhost/Ghost PR: 0
File: apps/shade/AGENTS.md:0-0
Timestamp: 2025-11-26T11:05:59.314Z
Learning: Applies to apps/shade/src/**/*.{ts,tsx,js} : Use `camelCase` for function and variable names

Applied to files:

  • apps/admin-x-design-system/src/global/chrome/desktop-chrome-header.stories.tsx
  • apps/admin-x-design-system/src/global/menu.tsx
  • apps/admin-x-design-system/.eslintrc.cjs
  • apps/admin-x-design-system/src/global/table.tsx
  • apps/admin-x-design-system/src/global/sortable-list.tsx
  • apps/admin-x-design-system/src/global/layout/view-container.tsx
  • apps/admin-x-design-system/src/global/form/code-editor.tsx
  • apps/admin-x-design-system/src/global/form/multi-select.tsx
  • apps/admin-x-design-system/src/global/icon-label.tsx
  • apps/admin-x-design-system/src/global/list-heading.tsx
  • apps/admin-x-design-system/src/global/form/checkbox-group.tsx
📚 Learning: 2025-11-26T11:05:59.314Z
Learnt from: CR
Repo: TryGhost/Ghost PR: 0
File: apps/shade/AGENTS.md:0-0
Timestamp: 2025-11-26T11:05:59.314Z
Learning: Applies to apps/shade/src/components/**/*.{ts,tsx} : Use CVA (Class Variance Authority) for component variants when useful instead of heavy prop configuration

Applied to files:

  • apps/admin-x-design-system/src/global/form/select.stories.tsx
  • apps/admin-x-design-system/src/global/tab-view.stories.tsx
  • apps/admin-x-design-system/src/global/form/checkbox.tsx
  • apps/admin-x-design-system/src/global/form/toggle.tsx
  • apps/admin-x-design-system/src/global/modal/preview-modal.stories.tsx
  • apps/admin-x-design-system/src/global/form/color-picker.stories.tsx
  • apps/admin-x-design-system/src/global/menu.tsx
  • apps/admin-x-design-system/src/global/form/toggle-group.stories.tsx
  • apps/admin-x-design-system/src/global/sortable-list.tsx
  • apps/admin-x-design-system/src/global/layout/view-container.tsx
  • apps/admin-x-design-system/src/global/modal/confirmation-modal.tsx
  • apps/admin-x-design-system/src/global/form/radio.tsx
  • apps/admin-x-design-system/src/global/layout/page.tsx
  • apps/admin-x-design-system/src/global/form/multi-select.tsx
  • apps/admin-x-design-system/src/global/modal/limit-modal.tsx
  • apps/admin-x-design-system/src/global/icon-label.stories.tsx
  • apps/admin-x-design-system/src/global/modal/modal.tsx
  • apps/admin-x-design-system/src/global/tab-view.tsx
  • apps/admin-x-design-system/src/global/form/toggle.stories.tsx
  • apps/admin-x-design-system/src/global/list-heading.tsx
  • apps/admin-x-design-system/src/global/form/checkbox-group.tsx
  • apps/admin-x-design-system/src/global/sort-menu.tsx
  • apps/admin-x-design-system/src/global/modal/preview-modal.tsx
  • apps/admin-x-design-system/src/global/form/color-picker-field.tsx
📚 Learning: 2025-11-26T11:05:59.314Z
Learnt from: CR
Repo: TryGhost/Ghost PR: 0
File: apps/shade/AGENTS.md:0-0
Timestamp: 2025-11-26T11:05:59.314Z
Learning: Applies to apps/shade/**/*.stories.{ts,tsx} : Storybook stories for new components should include an overview explaining what the component does and its primary use case

Applied to files:

  • apps/admin-x-design-system/src/global/breadcrumbs.stories.tsx
  • apps/admin-x-design-system/src/global/tab-view.stories.tsx
  • apps/admin-x-design-system/src/global/chrome/desktop-chrome.stories.tsx
  • apps/admin-x-design-system/src/global/modal/modal-page.stories.tsx
  • apps/admin-x-design-system/src/global/list.stories.tsx
  • apps/admin-x-design-system/src/global/modal/preview-modal.stories.tsx
  • apps/admin-x-design-system/src/global/form/color-picker.stories.tsx
  • apps/admin-x-design-system/src/global/form/toggle-group.stories.tsx
  • apps/admin-x-design-system/src/global/table-row.stories.tsx
  • apps/admin-x-design-system/src/boilerplate.stories.tsx
  • apps/admin-x-design-system/src/global/layout/view-container.stories.tsx
  • apps/admin-x-design-system/src/global/infinite-scroll-listener.stories.tsx
  • apps/admin-x-design-system/src/global/button.stories.tsx
  • apps/admin-x-design-system/src/global/form/color-picker-field.stories.tsx
  • apps/admin-x-design-system/src/global/layout/page.stories.tsx
  • apps/admin-x-design-system/src/global/table.stories.tsx
  • apps/admin-x-design-system/src/global/sticky-footer.stories.tsx
  • apps/admin-x-design-system/src/global/form/color-indicator.stories.tsx
  • apps/admin-x-design-system/src/global/form/form.stories.tsx
  • apps/admin-x-design-system/src/global/layout/page-header.stories.tsx
  • apps/admin-x-design-system/src/global/icon-label.stories.tsx
  • apps/admin-x-design-system/src/global/form/toggle.stories.tsx
  • apps/admin-x-design-system/src/global/form/text-area.stories.tsx
  • apps/admin-x-design-system/src/global/heading.stories.tsx
📚 Learning: 2025-11-26T11:05:59.314Z
Learnt from: CR
Repo: TryGhost/Ghost PR: 0
File: apps/shade/AGENTS.md:0-0
Timestamp: 2025-11-26T11:05:59.314Z
Learning: Applies to apps/shade/src/components/layout/**/*.{ts,tsx} : Reusable layout containers (Page, Heading, Header, ViewHeader, ErrorPage) should be placed in `src/components/layout/*`

Applied to files:

  • apps/admin-x-design-system/src/global/tab-view.stories.tsx
  • apps/admin-x-design-system/src/global/modal/modal-page.tsx
  • apps/admin-x-design-system/src/global/modal/modal-page.stories.tsx
  • apps/admin-x-design-system/src/global/layout/app-menu.tsx
  • apps/admin-x-design-system/src/global/error-boundary.tsx
  • apps/admin-x-design-system/src/global/form/form.tsx
  • apps/admin-x-design-system/src/global/layout/global-actions.tsx
  • apps/admin-x-design-system/src/global/sortable-list.tsx
  • apps/admin-x-design-system/src/global/layout/view-container.tsx
  • apps/admin-x-design-system/src/global/layout/view-container.stories.tsx
  • apps/admin-x-design-system/src/global/layout/page.tsx
  • apps/admin-x-design-system/src/global/layout/page.stories.tsx
  • apps/admin-x-design-system/src/global/form/multi-select.tsx
  • apps/admin-x-design-system/src/global/layout/page-header.stories.tsx
  • apps/admin-x-design-system/src/global/table-head.tsx
  • apps/admin-x-design-system/src/global/heading.tsx
  • apps/admin-x-design-system/src/global/list-heading.tsx
  • apps/admin-x-design-system/src/global/form/checkbox-group.tsx
📚 Learning: 2025-11-26T11:05:59.314Z
Learnt from: CR
Repo: TryGhost/Ghost PR: 0
File: apps/shade/AGENTS.md:0-0
Timestamp: 2025-11-26T11:05:59.314Z
Learning: Applies to apps/shade/src/components/features/**/*.{ts,tsx} : Higher-level, opinionated components (e.g., PostShareModal, SourceTabs) should be placed in `src/components/features/*`

Applied to files:

  • apps/admin-x-design-system/src/global/tab-view.stories.tsx
  • apps/admin-x-design-system/src/global/modal/modal.stories.tsx
  • apps/admin-x-design-system/src/global/modal/preview-modal.stories.tsx
  • apps/admin-x-design-system/src/global/menu.tsx
  • apps/admin-x-design-system/src/global/layout/view-container.tsx
  • apps/admin-x-design-system/src/global/layout/page.tsx
  • apps/admin-x-design-system/src/global/layout/page.stories.tsx
  • apps/admin-x-design-system/src/global/modal/modal.tsx
  • apps/admin-x-design-system/src/global/tab-view.tsx
  • apps/admin-x-design-system/src/global/modal/preview-modal.tsx
📚 Learning: 2025-11-25T14:28:50.351Z
Learnt from: CR
Repo: TryGhost/Ghost PR: 0
File: AGENTS.md:0-0
Timestamp: 2025-11-25T14:28:50.351Z
Learning: Use `shade` design system for new components in Admin UI (avoid legacy `admin-x-design-system`)

Applied to files:

  • apps/admin-x-design-system/.storybook/preview.tsx
📚 Learning: 2025-11-25T11:58:51.652Z
Learnt from: ibalosh
Repo: TryGhost/Ghost PR: 25525
File: apps/shade/src/shade-app.tsx:4-4
Timestamp: 2025-11-25T11:58:51.652Z
Learning: In apps/shade, the app wrapper file should be named `src/shade-app.tsx` (kebab-case) while the component itself is exported as `ShadeApp` (PascalCase). Context providers should be placed in `src/providers/*` using kebab-case filenames.

Applied to files:

  • apps/admin-x-design-system/src/global/form/text-field.tsx
  • apps/admin-x-design-system/src/global/sortable-list.tsx
  • apps/admin-x-design-system/src/global/layout/view-container.tsx
  • apps/admin-x-design-system/src/global/layout/page.tsx
  • apps/admin-x-design-system/src/global/icon-label.stories.tsx
  • apps/admin-x-design-system/src/design-system-app.tsx
  • apps/admin-x-design-system/src/global/list-heading.tsx
📚 Learning: 2025-05-28T12:54:13.035Z
Learnt from: kevinansfield
Repo: TryGhost/Ghost PR: 23566
File: apps/admin-x-design-system/src/global/form/ColorIndicator.tsx:77-79
Timestamp: 2025-05-28T12:54:13.035Z
Learning: In the ColorIndicator component in apps/admin-x-design-system/src/global/form/ColorIndicator.tsx, the containerClassName prop is currently useless because it gets hardcoded to 'flex flex-col gap-3' instead of being merged with any passed-in className.

Applied to files:

  • apps/admin-x-design-system/src/global/form/checkbox.tsx
  • apps/admin-x-design-system/src/global/form/color-picker.stories.tsx
  • apps/admin-x-design-system/src/global/form/color-indicator.tsx
  • apps/admin-x-design-system/src/global/form/color-picker-field.stories.tsx
  • apps/admin-x-design-system/src/global/form/color-picker.tsx
  • apps/admin-x-design-system/src/global/form/color-indicator.stories.tsx
  • apps/admin-x-design-system/src/global/form/color-picker-field.tsx
📚 Learning: 2025-11-26T11:05:59.314Z
Learnt from: CR
Repo: TryGhost/Ghost PR: 0
File: apps/shade/AGENTS.md:0-0
Timestamp: 2025-11-26T11:05:59.314Z
Learning: Applies to apps/shade/src/components/**/*.{ts,tsx} : Use Tailwind CSS scoped via `.shade` class; dark mode uses `.dark`

Applied to files:

  • apps/admin-x-design-system/src/global/form/checkbox.tsx
  • apps/admin-x-design-system/src/global/modal/preview-modal.tsx
  • apps/admin-x-design-system/src/global/form/color-picker-field.tsx
📚 Learning: 2025-07-14T16:46:42.646Z
Learnt from: sagzy
Repo: TryGhost/Ghost PR: 24350
File: apps/admin-x-settings/src/components/settings/growth/Network.tsx:29-33
Timestamp: 2025-07-14T16:46:42.646Z
Learning: In the Ghost Admin UI, toggles should not display a checked state when disabled. The design principle is to either show disabled+unchecked or enabled+toggleable states, never checked+disabled. This applies to components like the Network toggle in apps/admin-x-settings/src/components/settings/growth/Network.tsx.

Applied to files:

  • apps/admin-x-design-system/src/global/form/toggle.tsx
  • apps/admin-x-design-system/src/global/form/toggle-group.stories.tsx
  • apps/admin-x-design-system/src/global/form/toggle.stories.tsx
📚 Learning: 2025-11-26T11:05:59.314Z
Learnt from: CR
Repo: TryGhost/Ghost PR: 0
File: apps/shade/AGENTS.md:0-0
Timestamp: 2025-11-26T11:05:59.314Z
Learning: Applies to apps/shade/src/assets/**/*.{svg} : Logos and custom icon SVGs should be placed in `src/assets/*` with icons auto-exported via `Icon`

Applied to files:

  • apps/admin-x-design-system/src/global/form/image-upload.tsx
  • apps/admin-x-design-system/src/global/icon.stories.tsx
  • apps/admin-x-design-system/src/global/icon-label.stories.tsx
  • apps/admin-x-design-system/src/global/tab-view.tsx
  • apps/admin-x-design-system/src/global/icon-label.tsx
  • apps/admin-x-design-system/src/global/no-value-label.tsx
📚 Learning: 2025-11-25T14:28:50.351Z
Learnt from: CR
Repo: TryGhost/Ghost PR: 0
File: AGENTS.md:0-0
Timestamp: 2025-11-25T14:28:50.351Z
Learning: Ember admin uses `AdminXComponent` to dynamically import React apps with Suspense and error boundaries

Applied to files:

  • apps/admin-x-design-system/src/global/error-boundary.tsx
  • apps/admin-x-design-system/src/global/form/html-editor.tsx
  • apps/admin-x-design-system/src/global/error-boundary.stories.tsx
📚 Learning: 2025-10-23T07:35:27.719Z
Learnt from: jonatansberg
Repo: TryGhost/Ghost PR: 25227
File: apps/posts/src/views/Tags/components/TagsList.tsx:99-101
Timestamp: 2025-10-23T07:35:27.719Z
Learning: In the Shade library (apps/shade/src/components/ui/table.tsx), both TableRow and TableCell components include 'relative' positioning in their base className definitions by default, so explicit relative positioning may not be needed unless overriding with other position values like 'static'.

Applied to files:

  • apps/admin-x-design-system/src/global/table/dynamic-table.tsx
  • apps/admin-x-design-system/src/global/table-row.stories.tsx
  • apps/admin-x-design-system/src/global/table.tsx
  • apps/admin-x-design-system/src/global/table.stories.tsx
  • apps/admin-x-design-system/src/global/table-head.tsx
📚 Learning: 2025-10-23T07:31:38.913Z
Learnt from: jonatansberg
Repo: TryGhost/Ghost PR: 25227
File: apps/posts/src/views/Tags/components/TagsList.tsx:96-96
Timestamp: 2025-10-23T07:31:38.913Z
Learning: The Shade library's TableRow component includes a 'group' class in its base className, and custom selectors like [&.group:hover_td]:bg-transparent may be used to override default group-hover behavior from TableCell components.

Applied to files:

  • apps/admin-x-design-system/src/global/table/dynamic-table.tsx
📚 Learning: 2025-11-26T11:05:59.314Z
Learnt from: CR
Repo: TryGhost/Ghost PR: 0
File: apps/shade/AGENTS.md:0-0
Timestamp: 2025-11-26T11:05:59.314Z
Learning: When changing tokens/config, verify Storybook and a library build still succeed

Applied to files:

  • apps/admin-x-design-system/src/global/form/toggle-group.stories.tsx
  • apps/admin-x-design-system/src/global/layout/page.stories.tsx
📚 Learning: 2025-11-26T11:05:59.314Z
Learnt from: CR
Repo: TryGhost/Ghost PR: 0
File: apps/shade/AGENTS.md:0-0
Timestamp: 2025-11-26T11:05:59.314Z
Learning: Applies to apps/shade/{src,test}/**/*.{ts,tsx,js} : Follow ESLint and `tailwindcss/*` plugin rules when writing styles

Applied to files:

  • apps/admin-x-design-system/.eslintrc.cjs
📚 Learning: 2025-11-24T17:29:43.865Z
Learnt from: CR
Repo: TryGhost/Ghost PR: 0
File: e2e/AGENTS.md:0-0
Timestamp: 2025-11-24T17:29:43.865Z
Learning: Applies to e2e/**/*.test.ts : Test suite names should follow the format 'Ghost Admin - Feature' or 'Ghost Public - Feature'

Applied to files:

  • apps/admin-x-design-system/.eslintrc.cjs
📚 Learning: 2025-11-24T17:29:43.865Z
Learnt from: CR
Repo: TryGhost/Ghost PR: 0
File: e2e/AGENTS.md:0-0
Timestamp: 2025-11-24T17:29:43.865Z
Learning: Applies to e2e/**/*.test.ts : Test names should be lowercase and follow the format 'what is tested - expected outcome'

Applied to files:

  • apps/admin-x-design-system/src/global/table-row.stories.tsx
📚 Learning: 2025-11-12T22:26:48.725Z
Learnt from: troyciesco
Repo: TryGhost/Ghost PR: 25271
File: apps/stats/src/views/Stats/Growth/Growth.tsx:199-204
Timestamp: 2025-11-12T22:26:48.725Z
Learning: In apps/stats/src/views/Stats/Growth/Growth.tsx, the loading skeleton for the top posts/pages table intentionally uses colSpan={1} to only span the first (wider) column, creating a visual effect where the skeleton appears only in the main content column (which contains post/page titles with dates).

Applied to files:

  • apps/admin-x-design-system/src/global/layout/page.stories.tsx
📚 Learning: 2025-11-06T05:35:41.162Z
Learnt from: danielraffel
Repo: TryGhost/Ghost PR: 25366
File: apps/admin/src/layout/app-sidebar/NavHeader.tsx:13-23
Timestamp: 2025-11-06T05:35:41.162Z
Learning: In apps/admin/src/layout/app-sidebar/NavHeader.tsx, the React component dispatches a synthetic KeyboardEvent to trigger the Ember keymaster.js search modal shortcut. This approach is known to have cross-browser reliability issues but was deferred for architectural refactoring in a separate PR. The recommended fix is to expose a global function or custom DOM event from the Ember app instead of relying on synthetic keyboard events with keymaster.js.

Applied to files:

  • apps/admin-x-design-system/src/global/sort-menu.tsx
  • apps/admin-x-design-system/src/global/modal/preview-modal.tsx
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (4)
  • GitHub Check: Admin-X Settings tests
  • GitHub Check: Lint
  • GitHub Check: Unit tests (Node 22.18.0)
  • GitHub Check: Build & Push

@ibalosh ibalosh force-pushed the moved-to-kebab-case-formatting-admin-x-design-system branch 2 times, most recently from 44a8e63 to 56178a2 Compare December 4, 2025 13:48
Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

🧹 Nitpick comments (1)
apps/admin-x-design-system/src/global/form/checkbox-group.stories.tsx (1)

3-9: Story import updated correctly to kebab-case filename

Importing CheckboxGroup from ./checkbox-group matches the new file naming convention and shouldn’t affect runtime behavior.

While you’re here, consider normalizing the story title string ('GLobal / Form / Checkbox group') to consistent capitalization if that casing isn’t intentional.

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 44a8e63 and 56178a2.

📒 Files selected for processing (107)
  • apps/admin-x-design-system/.eslintrc.cjs (1 hunks)
  • apps/admin-x-design-system/.storybook/preview.tsx (1 hunks)
  • apps/admin-x-design-system/README.md (0 hunks)
  • apps/admin-x-design-system/src/boilerplate.stories.tsx (1 hunks)
  • apps/admin-x-design-system/src/design-system-app.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/avatar.stories.tsx (2 hunks)
  • apps/admin-x-design-system/src/global/banner.stories.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/breadcrumbs.stories.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/breadcrumbs.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/button-group.stories.tsx (2 hunks)
  • apps/admin-x-design-system/src/global/button-group.tsx (2 hunks)
  • apps/admin-x-design-system/src/global/button.stories.tsx (2 hunks)
  • apps/admin-x-design-system/src/global/button.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/chrome/desktop-chrome-header.stories.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/chrome/desktop-chrome.stories.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/chrome/mobile-chrome.stories.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/error-boundary.stories.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/error-boundary.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/form/checkbox-group.stories.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/form/checkbox-group.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/form/checkbox.stories.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/form/checkbox.tsx (2 hunks)
  • apps/admin-x-design-system/src/global/form/code-editor-view.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/form/code-editor.stories.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/form/code-editor.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/form/color-indicator.stories.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/form/color-indicator.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/form/color-picker-field.stories.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/form/color-picker-field.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/form/color-picker.stories.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/form/color-picker.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/form/currency-field.stories.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/form/currency-field.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/form/file-upload.stories.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/form/form.stories.tsx (2 hunks)
  • apps/admin-x-design-system/src/global/form/form.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/form/html-editor.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/form/html-field.stories.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/form/html-field.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/form/image-upload.stories.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/form/image-upload.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/form/multi-select.stories.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/form/multi-select.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/form/radio.stories.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/form/radio.tsx (2 hunks)
  • apps/admin-x-design-system/src/global/form/select.stories.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/form/select.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/form/text-area.stories.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/form/text-area.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/form/text-field.stories.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/form/text-field.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/form/toggle-group.stories.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/form/toggle.stories.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/form/toggle.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/form/url-text-field.stories.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/form/url-text-field.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/heading.stories.tsx (2 hunks)
  • apps/admin-x-design-system/src/global/heading.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/hint.stories.tsx (2 hunks)
  • apps/admin-x-design-system/src/global/icon-label.stories.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/icon-label.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/icon.stories.tsx (2 hunks)
  • apps/admin-x-design-system/src/global/infinite-scroll-listener.stories.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/layout/app-menu.tsx (2 hunks)
  • apps/admin-x-design-system/src/global/layout/global-actions.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/layout/page-header.stories.tsx (2 hunks)
  • apps/admin-x-design-system/src/global/layout/page.stories.tsx (4 hunks)
  • apps/admin-x-design-system/src/global/layout/page.tsx (2 hunks)
  • apps/admin-x-design-system/src/global/layout/view-container.stories.tsx (2 hunks)
  • apps/admin-x-design-system/src/global/layout/view-container.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/link.stories.tsx (2 hunks)
  • apps/admin-x-design-system/src/global/list-heading.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/list-item.stories.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/list.stories.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/list.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/loading-indicator.stories.tsx (3 hunks)
  • apps/admin-x-design-system/src/global/menu.stories.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/menu.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/modal/confirmation-modal.stories.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/modal/confirmation-modal.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/modal/limit-modal.stories.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/modal/limit-modal.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/modal/modal-page.stories.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/modal/modal-page.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/modal/modal.stories.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/modal/modal.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/modal/preview-modal.stories.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/modal/preview-modal.tsx (2 hunks)
  • apps/admin-x-design-system/src/global/no-value-label.stories.tsx (3 hunks)
  • apps/admin-x-design-system/src/global/no-value-label.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/pagination.stories.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/pagination.tsx (2 hunks)
  • apps/admin-x-design-system/src/global/popover.stories.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/separator.stories.tsx (2 hunks)
  • apps/admin-x-design-system/src/global/sort-menu.stories.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/sort-menu.tsx (2 hunks)
  • apps/admin-x-design-system/src/global/sortable-list.stories.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/sortable-list.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/sticky-footer.stories.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/tab-view.stories.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/tab-view.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/table-head.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/table-row.stories.tsx (2 hunks)
  • apps/admin-x-design-system/src/global/table.stories.tsx (2 hunks)
  • apps/admin-x-design-system/src/global/table.tsx (1 hunks)
  • apps/admin-x-design-system/src/global/table/dynamic-table.stories.tsx (2 hunks)
  • apps/admin-x-design-system/src/global/table/dynamic-table.tsx (1 hunks)
⛔ Files not processed due to max files limit (26)
  • apps/admin-x-design-system/src/global/toast.stories.tsx
  • apps/admin-x-design-system/src/global/toast.tsx
  • apps/admin-x-design-system/src/global/tooltip.stories.tsx
  • apps/admin-x-design-system/src/index.ts
  • apps/admin-x-design-system/src/providers/design-system-provider.tsx
  • apps/admin-x-design-system/src/settings/setting-group-content.stories.tsx
  • apps/admin-x-design-system/src/settings/setting-group-content.tsx
  • apps/admin-x-design-system/src/settings/setting-group-header.stories.tsx
  • apps/admin-x-design-system/src/settings/setting-group-header.tsx
  • apps/admin-x-design-system/src/settings/setting-group.stories.tsx
  • apps/admin-x-design-system/src/settings/setting-group.tsx
  • apps/admin-x-design-system/src/settings/setting-nav-item.stories.tsx
  • apps/admin-x-design-system/src/settings/setting-nav-item.tsx
  • apps/admin-x-design-system/src/settings/setting-nav-section.stories.tsx
  • apps/admin-x-design-system/src/settings/setting-section-header.stories.tsx
  • apps/admin-x-design-system/src/settings/setting-section.stories.tsx
  • apps/admin-x-design-system/src/settings/setting-section.tsx
  • apps/admin-x-design-system/src/settings/setting-value.stories.tsx
  • apps/admin-x-design-system/src/settings/setting-value.tsx
  • apps/admin-x-design-system/src/settings/stripe-button.stories.tsx
  • apps/admin-x-design-system/src/settings/stripe-button.tsx
  • apps/admin-x-design-system/src/utils/modals.tsx
  • apps/admin-x-design-system/test/.eslintrc.cjs
  • apps/admin-x-design-system/test/unit/hooks/use-pagination.test.ts
  • apps/admin-x-design-system/test/unit/hooks/use-sortable-indexed-list.test.ts
  • apps/admin-x-design-system/test/unit/utils/format-url.test.ts
💤 Files with no reviewable changes (1)
  • apps/admin-x-design-system/README.md
🚧 Files skipped from review as they are similar to previous changes (63)
  • apps/admin-x-design-system/src/global/form/color-picker.stories.tsx
  • apps/admin-x-design-system/src/global/list-item.stories.tsx
  • apps/admin-x-design-system/src/boilerplate.stories.tsx
  • apps/admin-x-design-system/src/global/modal/preview-modal.stories.tsx
  • apps/admin-x-design-system/src/global/form/color-indicator.tsx
  • apps/admin-x-design-system/src/global/error-boundary.stories.tsx
  • apps/admin-x-design-system/src/global/form/url-text-field.stories.tsx
  • apps/admin-x-design-system/src/global/tab-view.tsx
  • apps/admin-x-design-system/src/global/hint.stories.tsx
  • apps/admin-x-design-system/src/global/breadcrumbs.stories.tsx
  • apps/admin-x-design-system/src/global/infinite-scroll-listener.stories.tsx
  • apps/admin-x-design-system/src/global/breadcrumbs.tsx
  • apps/admin-x-design-system/src/global/form/toggle.stories.tsx
  • apps/admin-x-design-system/src/design-system-app.tsx
  • apps/admin-x-design-system/src/global/icon.stories.tsx
  • apps/admin-x-design-system/src/global/layout/app-menu.tsx
  • apps/admin-x-design-system/src/global/sortable-list.tsx
  • apps/admin-x-design-system/src/global/sticky-footer.stories.tsx
  • apps/admin-x-design-system/.storybook/preview.tsx
  • apps/admin-x-design-system/src/global/chrome/desktop-chrome-header.stories.tsx
  • apps/admin-x-design-system/src/global/form/select.stories.tsx
  • apps/admin-x-design-system/src/global/chrome/mobile-chrome.stories.tsx
  • apps/admin-x-design-system/src/global/form/code-editor.tsx
  • apps/admin-x-design-system/src/global/modal/modal.tsx
  • apps/admin-x-design-system/src/global/layout/page-header.stories.tsx
  • apps/admin-x-design-system/src/global/form/color-indicator.stories.tsx
  • apps/admin-x-design-system/src/global/form/text-area.stories.tsx
  • apps/admin-x-design-system/src/global/sort-menu.tsx
  • apps/admin-x-design-system/src/global/form/html-editor.tsx
  • apps/admin-x-design-system/src/global/modal/modal.stories.tsx
  • apps/admin-x-design-system/src/global/button.tsx
  • apps/admin-x-design-system/src/global/tab-view.stories.tsx
  • apps/admin-x-design-system/src/global/layout/page.stories.tsx
  • apps/admin-x-design-system/src/global/form/radio.tsx
  • apps/admin-x-design-system/src/global/form/text-field.tsx
  • apps/admin-x-design-system/src/global/menu.stories.tsx
  • apps/admin-x-design-system/src/global/banner.stories.tsx
  • apps/admin-x-design-system/src/global/heading.tsx
  • apps/admin-x-design-system/src/global/form/currency-field.tsx
  • apps/admin-x-design-system/src/global/form/checkbox.tsx
  • apps/admin-x-design-system/src/global/chrome/desktop-chrome.stories.tsx
  • apps/admin-x-design-system/src/global/modal/limit-modal.stories.tsx
  • apps/admin-x-design-system/src/global/table-row.stories.tsx
  • apps/admin-x-design-system/src/global/avatar.stories.tsx
  • apps/admin-x-design-system/src/global/form/html-field.tsx
  • apps/admin-x-design-system/src/global/form/image-upload.tsx
  • apps/admin-x-design-system/src/global/form/currency-field.stories.tsx
  • apps/admin-x-design-system/src/global/form/image-upload.stories.tsx
  • apps/admin-x-design-system/src/global/menu.tsx
  • apps/admin-x-design-system/src/global/form/toggle.tsx
  • apps/admin-x-design-system/src/global/sortable-list.stories.tsx
  • apps/admin-x-design-system/src/global/loading-indicator.stories.tsx
  • apps/admin-x-design-system/src/global/error-boundary.tsx
  • apps/admin-x-design-system/src/global/form/multi-select.tsx
  • apps/admin-x-design-system/src/global/separator.stories.tsx
  • apps/admin-x-design-system/src/global/form/color-picker-field.stories.tsx
  • apps/admin-x-design-system/src/global/form/color-picker.tsx
  • apps/admin-x-design-system/src/global/form/multi-select.stories.tsx
  • apps/admin-x-design-system/src/global/table.stories.tsx
  • apps/admin-x-design-system/src/global/layout/view-container.stories.tsx
  • apps/admin-x-design-system/src/global/table-head.tsx
  • apps/admin-x-design-system/src/global/form/checkbox.stories.tsx
  • apps/admin-x-design-system/src/global/heading.stories.tsx
🧰 Additional context used
🧠 Learnings (23)
📓 Common learnings
Learnt from: CR
Repo: TryGhost/Ghost PR: 0
File: apps/shade/AGENTS.md:0-0
Timestamp: 2025-11-26T11:05:59.314Z
Learning: Applies to apps/shade/src/components/**/*.{ts,tsx} : Use `PascalCase` for component identifiers in filenames while keeping ShadCN-generated files in kebab-case
Learnt from: CR
Repo: TryGhost/Ghost PR: 0
File: apps/shade/AGENTS.md:0-0
Timestamp: 2025-11-26T11:05:59.314Z
Learning: Applies to apps/shade/src/**/*.{ts,tsx,js} : Use `camelCase` for function and variable names
Learnt from: ibalosh
Repo: TryGhost/Ghost PR: 25525
File: apps/shade/src/shade-app.tsx:4-4
Timestamp: 2025-11-25T11:58:51.652Z
Learning: In apps/shade, the app wrapper file should be named `src/shade-app.tsx` (kebab-case) while the component itself is exported as `ShadeApp` (PascalCase). Context providers should be placed in `src/providers/*` using kebab-case filenames.
Learnt from: CR
Repo: TryGhost/Ghost PR: 0
File: apps/shade/AGENTS.md:0-0
Timestamp: 2025-11-26T11:05:59.314Z
Learning: Applies to apps/shade/{src,test}/**/*.{ts,tsx,js} : Follow ESLint and `tailwindcss/*` plugin rules when writing styles
Learnt from: CR
Repo: TryGhost/Ghost PR: 0
File: apps/shade/AGENTS.md:0-0
Timestamp: 2025-11-26T11:05:59.314Z
Learning: Applies to apps/shade/**/*.stories.{ts,tsx} : Storybook stories should demonstrate key variants and states (sizes, disabled/loading, critical props) with minimal but representative examples
Learnt from: CR
Repo: TryGhost/Ghost PR: 0
File: apps/shade/AGENTS.md:0-0
Timestamp: 2025-11-26T11:05:59.314Z
Learning: Applies to apps/shade/src/components/ui/**/*.{ts,tsx} : Atomic UI components should be placed in `src/components/ui/*` and each component must have a corresponding `*.stories.tsx` file next to it for Storybook documentation
Learnt from: CR
Repo: TryGhost/Ghost PR: 0
File: apps/shade/AGENTS.md:0-0
Timestamp: 2025-11-26T11:05:59.314Z
Learning: Applies to apps/shade/src/**/*.{ts,tsx,js} : Use the `@` alias for internal imports (e.g., `@/lib/utils`)
Learnt from: sagzy
Repo: TryGhost/Ghost PR: 24673
File: ghost/i18n/lib/i18n.js:34-35
Timestamp: 2025-11-24T11:12:15.712Z
Learning: In the Ghost i18n package (ghost/i18n/lib/i18n.js), changing existing locale codes requires backwards compatibility handling for users who have already configured those locales. Such changes should be done in a separate PR with migration logic rather than included in feature PRs.
📚 Learning: 2025-11-26T11:05:59.314Z
Learnt from: CR
Repo: TryGhost/Ghost PR: 0
File: apps/shade/AGENTS.md:0-0
Timestamp: 2025-11-26T11:05:59.314Z
Learning: Applies to apps/shade/src/components/**/*.{ts,tsx} : Use `PascalCase` for component identifiers in filenames while keeping ShadCN-generated files in kebab-case

Applied to files:

  • apps/admin-x-design-system/src/global/table.tsx
  • apps/admin-x-design-system/src/global/form/checkbox-group.tsx
  • apps/admin-x-design-system/src/global/layout/page.tsx
  • apps/admin-x-design-system/src/global/icon-label.tsx
  • apps/admin-x-design-system/src/global/pagination.stories.tsx
  • apps/admin-x-design-system/src/global/layout/view-container.tsx
  • apps/admin-x-design-system/src/global/table/dynamic-table.stories.tsx
  • apps/admin-x-design-system/src/global/form/text-area.tsx
  • apps/admin-x-design-system/src/global/form/color-picker-field.tsx
  • apps/admin-x-design-system/src/global/list.stories.tsx
  • apps/admin-x-design-system/src/global/list.tsx
  • apps/admin-x-design-system/src/global/form/code-editor.stories.tsx
  • apps/admin-x-design-system/src/global/form/text-field.stories.tsx
  • apps/admin-x-design-system/src/global/list-heading.tsx
  • apps/admin-x-design-system/.eslintrc.cjs
  • apps/admin-x-design-system/src/global/icon-label.stories.tsx
📚 Learning: 2025-11-26T11:05:59.314Z
Learnt from: CR
Repo: TryGhost/Ghost PR: 0
File: apps/shade/AGENTS.md:0-0
Timestamp: 2025-11-26T11:05:59.314Z
Learning: Applies to apps/shade/src/**/*.{ts,tsx,js} : Use `camelCase` for function and variable names

Applied to files:

  • apps/admin-x-design-system/src/global/table.tsx
  • apps/admin-x-design-system/.eslintrc.cjs
📚 Learning: 2025-10-23T07:35:27.719Z
Learnt from: jonatansberg
Repo: TryGhost/Ghost PR: 25227
File: apps/posts/src/views/Tags/components/TagsList.tsx:99-101
Timestamp: 2025-10-23T07:35:27.719Z
Learning: In the Shade library (apps/shade/src/components/ui/table.tsx), both TableRow and TableCell components include 'relative' positioning in their base className definitions by default, so explicit relative positioning may not be needed unless overriding with other position values like 'static'.

Applied to files:

  • apps/admin-x-design-system/src/global/table.tsx
  • apps/admin-x-design-system/src/global/table/dynamic-table.tsx
📚 Learning: 2025-11-26T11:05:59.314Z
Learnt from: CR
Repo: TryGhost/Ghost PR: 0
File: apps/shade/AGENTS.md:0-0
Timestamp: 2025-11-26T11:05:59.314Z
Learning: Applies to apps/shade/src/**/*.{ts,tsx,js} : Use the `@` alias for internal imports (e.g., `@/lib/utils`)

Applied to files:

  • apps/admin-x-design-system/src/global/table.tsx
  • apps/admin-x-design-system/src/global/form/file-upload.stories.tsx
  • apps/admin-x-design-system/src/global/layout/page.tsx
  • apps/admin-x-design-system/src/global/icon-label.tsx
  • apps/admin-x-design-system/src/global/no-value-label.tsx
  • apps/admin-x-design-system/src/global/form/text-area.tsx
  • apps/admin-x-design-system/src/global/form/color-picker-field.tsx
  • apps/admin-x-design-system/src/global/list.stories.tsx
  • apps/admin-x-design-system/src/global/list.tsx
  • apps/admin-x-design-system/src/global/form/code-editor.stories.tsx
  • apps/admin-x-design-system/src/global/list-heading.tsx
  • apps/admin-x-design-system/src/global/form/radio.stories.tsx
  • apps/admin-x-design-system/src/global/icon-label.stories.tsx
📚 Learning: 2025-11-26T11:05:59.314Z
Learnt from: CR
Repo: TryGhost/Ghost PR: 0
File: apps/shade/AGENTS.md:0-0
Timestamp: 2025-11-26T11:05:59.314Z
Learning: Applies to apps/shade/src/components/ui/**/*.{ts,tsx} : Atomic UI components should be placed in `src/components/ui/*` and each component must have a corresponding `*.stories.tsx` file next to it for Storybook documentation

Applied to files:

  • apps/admin-x-design-system/src/global/modal/confirmation-modal.stories.tsx
  • apps/admin-x-design-system/src/global/form/file-upload.stories.tsx
  • apps/admin-x-design-system/src/global/form/toggle-group.stories.tsx
  • apps/admin-x-design-system/src/global/form/checkbox-group.stories.tsx
  • apps/admin-x-design-system/src/global/pagination.stories.tsx
  • apps/admin-x-design-system/src/global/no-value-label.stories.tsx
  • apps/admin-x-design-system/src/global/layout/view-container.tsx
  • apps/admin-x-design-system/src/global/table/dynamic-table.stories.tsx
  • apps/admin-x-design-system/src/global/list.stories.tsx
  • apps/admin-x-design-system/src/global/button-group.stories.tsx
  • apps/admin-x-design-system/src/global/form/code-editor.stories.tsx
  • apps/admin-x-design-system/src/global/popover.stories.tsx
  • apps/admin-x-design-system/src/global/form/text-field.stories.tsx
  • apps/admin-x-design-system/src/global/modal/modal-page.stories.tsx
  • apps/admin-x-design-system/src/global/sort-menu.stories.tsx
  • apps/admin-x-design-system/src/global/form/radio.stories.tsx
  • apps/admin-x-design-system/src/global/button.stories.tsx
  • apps/admin-x-design-system/src/global/form/html-field.stories.tsx
  • apps/admin-x-design-system/src/global/link.stories.tsx
  • apps/admin-x-design-system/src/global/icon-label.stories.tsx
  • apps/admin-x-design-system/src/global/form/form.stories.tsx
📚 Learning: 2025-11-26T11:05:59.314Z
Learnt from: CR
Repo: TryGhost/Ghost PR: 0
File: apps/shade/AGENTS.md:0-0
Timestamp: 2025-11-26T11:05:59.314Z
Learning: Applies to apps/shade/**/*.stories.{ts,tsx} : Storybook stories should demonstrate key variants and states (sizes, disabled/loading, critical props) with minimal but representative examples

Applied to files:

  • apps/admin-x-design-system/src/global/modal/confirmation-modal.stories.tsx
  • apps/admin-x-design-system/src/global/form/toggle-group.stories.tsx
  • apps/admin-x-design-system/src/global/form/checkbox-group.stories.tsx
  • apps/admin-x-design-system/src/global/no-value-label.stories.tsx
  • apps/admin-x-design-system/src/global/table/dynamic-table.stories.tsx
  • apps/admin-x-design-system/src/global/list.stories.tsx
  • apps/admin-x-design-system/src/global/button-group.stories.tsx
  • apps/admin-x-design-system/src/global/popover.stories.tsx
  • apps/admin-x-design-system/src/global/form/text-field.stories.tsx
  • apps/admin-x-design-system/src/global/modal/modal-page.stories.tsx
  • apps/admin-x-design-system/src/global/sort-menu.stories.tsx
  • apps/admin-x-design-system/src/global/button.stories.tsx
  • apps/admin-x-design-system/src/global/link.stories.tsx
  • apps/admin-x-design-system/src/global/icon-label.stories.tsx
  • apps/admin-x-design-system/src/global/form/form.stories.tsx
📚 Learning: 2025-11-26T11:05:59.314Z
Learnt from: CR
Repo: TryGhost/Ghost PR: 0
File: apps/shade/AGENTS.md:0-0
Timestamp: 2025-11-26T11:05:59.314Z
Learning: Applies to apps/shade/src/index.ts : Place new UI components under `src/components/ui` and export them from `src/index.ts`

Applied to files:

  • apps/admin-x-design-system/src/global/form/file-upload.stories.tsx
  • apps/admin-x-design-system/src/global/layout/page.tsx
  • apps/admin-x-design-system/src/global/icon-label.tsx
  • apps/admin-x-design-system/src/global/layout/view-container.tsx
  • apps/admin-x-design-system/src/global/layout/global-actions.tsx
  • apps/admin-x-design-system/src/global/icon-label.stories.tsx
📚 Learning: 2025-10-23T07:31:38.913Z
Learnt from: jonatansberg
Repo: TryGhost/Ghost PR: 25227
File: apps/posts/src/views/Tags/components/TagsList.tsx:96-96
Timestamp: 2025-10-23T07:31:38.913Z
Learning: The Shade library's TableRow component includes a 'group' class in its base className, and custom selectors like [&.group:hover_td]:bg-transparent may be used to override default group-hover behavior from TableCell components.

Applied to files:

  • apps/admin-x-design-system/src/global/table/dynamic-table.tsx
📚 Learning: 2025-11-26T11:05:59.314Z
Learnt from: CR
Repo: TryGhost/Ghost PR: 0
File: apps/shade/AGENTS.md:0-0
Timestamp: 2025-11-26T11:05:59.314Z
Learning: Applies to apps/shade/**/*.stories.{ts,tsx} : Storybook stories for new components should include an overview explaining what the component does and its primary use case

Applied to files:

  • apps/admin-x-design-system/src/global/form/toggle-group.stories.tsx
  • apps/admin-x-design-system/src/global/no-value-label.stories.tsx
  • apps/admin-x-design-system/src/global/table/dynamic-table.stories.tsx
  • apps/admin-x-design-system/src/global/list.stories.tsx
  • apps/admin-x-design-system/src/global/modal/modal-page.stories.tsx
  • apps/admin-x-design-system/src/global/sort-menu.stories.tsx
  • apps/admin-x-design-system/src/global/form/form.stories.tsx
📚 Learning: 2025-11-26T11:05:59.314Z
Learnt from: CR
Repo: TryGhost/Ghost PR: 0
File: apps/shade/AGENTS.md:0-0
Timestamp: 2025-11-26T11:05:59.314Z
Learning: When changing tokens/config, verify Storybook and a library build still succeed

Applied to files:

  • apps/admin-x-design-system/src/global/form/toggle-group.stories.tsx
  • apps/admin-x-design-system/src/global/list.stories.tsx
  • apps/admin-x-design-system/src/global/modal/modal-page.stories.tsx
📚 Learning: 2025-11-26T11:05:59.314Z
Learnt from: CR
Repo: TryGhost/Ghost PR: 0
File: apps/shade/AGENTS.md:0-0
Timestamp: 2025-11-26T11:05:59.314Z
Learning: For new UI components, prioritize comprehensive Storybook stories; add focused unit tests where they provide real value (e.g., hooks, utils, logic-heavy parts)

Applied to files:

  • apps/admin-x-design-system/src/global/form/toggle-group.stories.tsx
  • apps/admin-x-design-system/src/global/no-value-label.stories.tsx
  • apps/admin-x-design-system/src/global/list.stories.tsx
  • apps/admin-x-design-system/src/global/popover.stories.tsx
  • apps/admin-x-design-system/src/global/form/form.stories.tsx
📚 Learning: 2025-11-26T11:05:59.314Z
Learnt from: CR
Repo: TryGhost/Ghost PR: 0
File: apps/shade/AGENTS.md:0-0
Timestamp: 2025-11-26T11:05:59.314Z
Learning: Applies to apps/shade/src/components/**/*.{ts,tsx} : Use CVA (Class Variance Authority) for component variants when useful instead of heavy prop configuration

Applied to files:

  • apps/admin-x-design-system/src/global/form/checkbox-group.tsx
  • apps/admin-x-design-system/src/global/modal/limit-modal.tsx
  • apps/admin-x-design-system/src/global/layout/view-container.tsx
  • apps/admin-x-design-system/src/global/button-group.tsx
  • apps/admin-x-design-system/src/global/modal/confirmation-modal.tsx
  • apps/admin-x-design-system/src/global/form/color-picker-field.tsx
📚 Learning: 2025-11-26T11:05:59.314Z
Learnt from: CR
Repo: TryGhost/Ghost PR: 0
File: apps/shade/AGENTS.md:0-0
Timestamp: 2025-11-26T11:05:59.314Z
Learning: Applies to apps/shade/src/components/**/*.{ts,tsx} : Prefer compound subcomponents (e.g., `Header.Title`, `Header.Meta`, `Header.Actions`) for multi-region components instead of many props

Applied to files:

  • apps/admin-x-design-system/src/global/form/checkbox-group.tsx
  • apps/admin-x-design-system/src/global/layout/page.tsx
  • apps/admin-x-design-system/src/global/layout/view-container.tsx
  • apps/admin-x-design-system/src/global/form/form.tsx
  • apps/admin-x-design-system/src/global/form/text-area.tsx
  • apps/admin-x-design-system/src/global/list.tsx
  • apps/admin-x-design-system/src/global/list-heading.tsx
📚 Learning: 2025-11-26T11:05:59.314Z
Learnt from: CR
Repo: TryGhost/Ghost PR: 0
File: apps/shade/AGENTS.md:0-0
Timestamp: 2025-11-26T11:05:59.314Z
Learning: Applies to apps/shade/src/components/layout/**/*.{ts,tsx} : Reusable layout containers (Page, Heading, Header, ViewHeader, ErrorPage) should be placed in `src/components/layout/*`

Applied to files:

  • apps/admin-x-design-system/src/global/layout/page.tsx
  • apps/admin-x-design-system/src/global/layout/view-container.tsx
  • apps/admin-x-design-system/src/global/form/form.tsx
  • apps/admin-x-design-system/src/global/modal/modal-page.tsx
  • apps/admin-x-design-system/src/global/layout/global-actions.tsx
  • apps/admin-x-design-system/src/global/list-heading.tsx
📚 Learning: 2025-11-26T11:05:59.314Z
Learnt from: CR
Repo: TryGhost/Ghost PR: 0
File: apps/shade/AGENTS.md:0-0
Timestamp: 2025-11-26T11:05:59.314Z
Learning: Applies to apps/shade/src/components/features/**/*.{ts,tsx} : Higher-level, opinionated components (e.g., PostShareModal, SourceTabs) should be placed in `src/components/features/*`

Applied to files:

  • apps/admin-x-design-system/src/global/layout/page.tsx
  • apps/admin-x-design-system/src/global/layout/view-container.tsx
📚 Learning: 2025-11-25T11:58:51.652Z
Learnt from: ibalosh
Repo: TryGhost/Ghost PR: 25525
File: apps/shade/src/shade-app.tsx:4-4
Timestamp: 2025-11-25T11:58:51.652Z
Learning: In apps/shade, the app wrapper file should be named `src/shade-app.tsx` (kebab-case) while the component itself is exported as `ShadeApp` (PascalCase). Context providers should be placed in `src/providers/*` using kebab-case filenames.

Applied to files:

  • apps/admin-x-design-system/src/global/layout/page.tsx
📚 Learning: 2025-11-26T11:05:59.314Z
Learnt from: CR
Repo: TryGhost/Ghost PR: 0
File: apps/shade/AGENTS.md:0-0
Timestamp: 2025-11-26T11:05:59.314Z
Learning: Applies to apps/shade/src/assets/**/*.{svg} : Logos and custom icon SVGs should be placed in `src/assets/*` with icons auto-exported via `Icon`

Applied to files:

  • apps/admin-x-design-system/src/global/icon-label.tsx
  • apps/admin-x-design-system/src/global/no-value-label.tsx
  • apps/admin-x-design-system/src/global/icon-label.stories.tsx
📚 Learning: 2025-01-29T15:23:58.658Z
Learnt from: cathysarisky
Repo: TryGhost/Ghost PR: 21982
File: ghost/i18n/locales/hu v2/portal.json:70-70
Timestamp: 2025-01-29T15:23:58.658Z
Learning: Typos and spelling errors within localization files (ghost/i18n/locales/*.json) must be treated as important problems, not nitpicks, as they directly affect the user experience for speakers of that language. These issues should be flagged with high priority during code review.

Applied to files:

  • apps/admin-x-design-system/src/global/no-value-label.stories.tsx
📚 Learning: 2025-05-28T12:54:13.035Z
Learnt from: kevinansfield
Repo: TryGhost/Ghost PR: 23566
File: apps/admin-x-design-system/src/global/form/ColorIndicator.tsx:77-79
Timestamp: 2025-05-28T12:54:13.035Z
Learning: In the ColorIndicator component in apps/admin-x-design-system/src/global/form/ColorIndicator.tsx, the containerClassName prop is currently useless because it gets hardcoded to 'flex flex-col gap-3' instead of being merged with any passed-in className.

Applied to files:

  • apps/admin-x-design-system/src/global/form/color-picker-field.tsx
📚 Learning: 2025-11-26T11:05:59.314Z
Learnt from: CR
Repo: TryGhost/Ghost PR: 0
File: apps/shade/AGENTS.md:0-0
Timestamp: 2025-11-26T11:05:59.314Z
Learning: Applies to apps/shade/{src,test}/**/*.{ts,tsx,js} : Follow ESLint and `tailwindcss/*` plugin rules when writing styles

Applied to files:

  • apps/admin-x-design-system/.eslintrc.cjs
📚 Learning: 2025-11-24T17:29:43.865Z
Learnt from: CR
Repo: TryGhost/Ghost PR: 0
File: e2e/AGENTS.md:0-0
Timestamp: 2025-11-24T17:29:43.865Z
Learning: Applies to e2e/**/*.test.ts : Test suite names should follow the format 'Ghost Admin - Feature' or 'Ghost Public - Feature'

Applied to files:

  • apps/admin-x-design-system/.eslintrc.cjs
📚 Learning: 2025-11-24T11:12:15.712Z
Learnt from: sagzy
Repo: TryGhost/Ghost PR: 24673
File: ghost/i18n/lib/i18n.js:34-35
Timestamp: 2025-11-24T11:12:15.712Z
Learning: In the Ghost i18n package (ghost/i18n/lib/i18n.js), changing existing locale codes requires backwards compatibility handling for users who have already configured those locales. Such changes should be done in a separate PR with migration logic rather than included in feature PRs.

Applied to files:

  • apps/admin-x-design-system/.eslintrc.cjs
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (4)
  • GitHub Check: Admin-X Settings tests
  • GitHub Check: Unit tests (Node 22.18.0)
  • GitHub Check: Lint
  • GitHub Check: Build & Push
🔇 Additional comments (46)
apps/admin-x-design-system/src/global/form/html-field.stories.tsx (1)

3-3: Import path rename matches new kebab-case convention

The updated import path correctly reflects the kebab-case filename and should keep Storybook behavior unchanged. No issues from this change.

apps/admin-x-design-system/src/global/link.stories.tsx (1)

3-24: Import path and story definition look correct

The switch to ./link matches the new lowercase filename convention, and the Storybook meta/story typings remain valid with no behavioral changes. All good here.

apps/admin-x-design-system/src/global/popover.stories.tsx (1)

4-5: Imports correctly aligned to kebab-case filenames

Updating the imports to ./button and ./popover matches the new lowercase/kebab-case filename convention without altering story behavior. Looks good and consistent with the PR’s goals.

apps/admin-x-design-system/src/global/form/code-editor.stories.tsx (1)

5-5: Import path now correctly follows kebab-case filename convention

The updated import (./code-editor) matches the kebab-case file naming goal while retaining a PascalCase component identifier; this is consistent with the stated PR conventions.

apps/admin-x-design-system/src/global/form/checkbox-group.tsx (1)

2-4: Import path casing aligns with kebab-case renames

Switching Heading, Hint, and Checkbox imports to kebab-case paths is consistent with the PR’s filename convention change and preserves behavior (same default + named export usage).

apps/admin-x-design-system/src/global/form/text-area.tsx (1)

4-6: LGTM! Import paths correctly updated to kebab-case.

The import paths have been properly updated to use kebab-case file names while maintaining PascalCase for the component exports (useFocusContext, Heading, Hint). This aligns with the PR objective of standardizing filenames to kebab-case format.

apps/admin-x-design-system/src/global/form/form.stories.tsx (2)

3-7: Imports correctly updated to kebab-case paths

The Storybook story and component imports now match the kebab-case filenames and PR conventions; no behavioral changes introduced.


56-56: Formatting-only change is safe

The updated closing brace here is formatting-only and does not affect story behavior.

apps/admin-x-design-system/src/global/form/file-upload.stories.tsx (1)

3-3: LGTM! Import path correctly updated to kebab-case.

The import path change from ./FileUpload to ./file-upload aligns with the PR's kebab-case standardization objective while correctly preserving the PascalCase component identifier.

apps/admin-x-design-system/src/global/form/code-editor-view.tsx (1)

5-7: LGTM! Import paths correctly updated to kebab-case.

The import paths have been properly updated to reflect the renamed files (kebab-case), while maintaining correct casing for the imported identifiers (PascalCase for components, camelCase for hooks). This aligns with the PR objective to standardize filenames to kebab-case.

apps/admin-x-design-system/src/global/form/url-text-field.tsx (1)

2-4: Imports correctly updated to kebab‑case module paths

The updated import paths align with the new kebab-case filenames and preserve the existing component/util APIs; no behavioral changes introduced here.

apps/admin-x-design-system/src/global/form/form.tsx (1)

3-3: LGTM! Import path updated to kebab-case.

The import path correctly reflects the kebab-case naming convention. No functional changes.

apps/admin-x-design-system/src/global/form/select.tsx (1)

5-8: LGTM! Import paths updated to kebab-case.

All import paths correctly reflect the kebab-case naming convention. No functional changes.

apps/admin-x-design-system/src/global/form/text-field.stories.tsx (1)

5-7: LGTM! Import paths updated to kebab-case.

All import paths correctly reflect the kebab-case naming convention. Story configuration and logic remain unchanged.

apps/admin-x-design-system/src/global/sort-menu.stories.tsx (1)

3-3: LGTM! Import path correctly updated to kebab-case.

The import path change from './SortMenu' to './sort-menu' aligns with the PR's kebab-case standardization objective and ensures consistent filename resolution across different filesystems.

apps/admin-x-design-system/src/global/button.stories.tsx (1)

3-3: Import path correctly uses kebab-case convention.

The change from './Button' to './button' is correct and consistent with the kebab-case naming already applied throughout the codebase. The button.tsx file exists and all related imports have been updated accordingly.

apps/admin-x-design-system/src/global/form/toggle-group.stories.tsx (1)

3-4: Import paths correctly updated to kebab-case.

The kebab-case file naming has been properly applied: ./toggle and ./toggle-group, while component identifiers remain PascalCase. Both renamed files exist and are correctly exported.

apps/admin-x-design-system/src/global/form/color-picker-field.tsx (1)

4-6: Import paths correctly migrated to kebab-case naming convention.

The import statements in lines 4-6 have been properly updated to use kebab-case file paths (color-indicator, color-picker, toggle), while the component identifiers themselves correctly remain in PascalCase (ColorIndicator, ColorPicker, ToggleDirections). The corresponding files have been renamed, and no remaining old-style PascalCase imports exist in the codebase.

apps/admin-x-design-system/src/global/icon-label.tsx (1)

2-2: Import path is correctly using kebab-case naming.

The import import Icon from './icon'; matches the actual kebab-case filename icon.tsx. No inconsistent uppercase Icon imports exist in the codebase.

apps/admin-x-design-system/src/global/icon-label.stories.tsx (1)

3-3: Import path correctly uses kebab-case naming convention.

All story file imports in admin-x-design-system follow the consistent pattern of kebab-case file paths with PascalCase component identifiers. The icon-label.stories.tsx import (from './icon-label') aligns with this established convention across the entire codebase.

apps/admin-x-design-system/src/global/layout/global-actions.tsx (1)

2-10: Import path normalization to kebab-case looks correct

The Button import now matches the kebab-case filename (../button), and the default export remains unchanged, so this should resolve cleanly on case-sensitive filesystems.

apps/admin-x-design-system/src/global/no-value-label.tsx (1)

2-2: Icon import updated to match lowercase filename

Switching to ./icon aligns with the kebab-case file naming and should be a no-op functionally as long as the file was renamed accordingly.

apps/admin-x-design-system/src/global/form/radio.stories.tsx (1)

4-4: Radio story now targets kebab-case component path

Updating the import to ./radio keeps the stories in sync with the renamed component file; the rest of the story typings and args remain valid.

apps/admin-x-design-system/src/global/no-value-label.stories.tsx (1)

3-34: Stories now import kebab-case modules and fix copy typo

Both List/NoValueLabel imports now use lowercase paths, and the displayed text has the corrected “No available entry” copy in all occurrences, which is consistent and tidy for Storybook.

apps/admin-x-design-system/src/global/list.tsx (1)

3-6: Heading/Hint/ListHeading/Separator imports aligned with kebab-case files

All shared global components are now imported from lowercase paths (./heading, ./hint, ./list-heading, ./separator), matching the new filename convention without altering List’s behavior.

apps/admin-x-design-system/.eslintrc.cjs (1)

33-35: New filename rule matches the kebab-case naming convention

Adding 'ghost/filenames/match-regex': ['error', '^[a-z0-9.-]+$', false] will enforce lowercase, digit, hyphen, and dot-only filenames, which fits the intended kebab-case pattern across this package.

apps/admin-x-design-system/src/global/modal/modal-page.tsx (1)

3-3: ModalPage Heading import updated to lowercase path

Using ../heading brings this file in line with the rest of the global components’ kebab-case filenames, with no change to the ModalPage API.

apps/admin-x-design-system/src/global/button-group.stories.tsx (1)

3-5: ButtonGroup stories now reference kebab-case modules

The story imports for ButtonGroup and ButtonProps correctly point to ./button-group and ./button, and the file now has a proper trailing newline; story args remain unchanged.

Also applies to: 61-61

apps/admin-x-design-system/src/global/modal/limit-modal.tsx (1)

3-3: LGTM! Import path correctly updated to kebab-case.

The import path change from ./Modal to ./modal aligns with the PR's objective to standardize filenames to kebab-case format. The component logic remains unchanged.

apps/admin-x-design-system/src/global/table/dynamic-table.tsx (1)

4-4: LGTM! Import path correctly updated to kebab-case.

The import path for tableRowHoverBgClasses has been correctly updated from ../TableRow to ../table-row, consistent with the kebab-case naming convention.

apps/admin-x-design-system/src/global/layout/view-container.tsx (1)

2-7: LGTM! All import paths correctly updated to kebab-case.

The import paths for TabView, Heading, Button, ButtonGroup, and DynamicTable have been consistently updated to their kebab-case equivalents. This aligns with the PR's objective to standardize filename conventions.

apps/admin-x-design-system/src/global/modal/modal-page.stories.tsx (1)

3-3: LGTM! Storybook import path correctly updated.

The import path has been updated from ./ModalPage to ./modal-page, maintaining consistency with the kebab-case naming convention across the design system.

apps/admin-x-design-system/src/global/list-heading.tsx (1)

2-3: LGTM! Import paths correctly updated to kebab-case.

Both imports for Heading and Separator have been updated to their kebab-case equivalents (./heading and ./separator), aligning with the standardized naming convention.

apps/admin-x-design-system/src/global/pagination.stories.tsx (1)

3-3: LGTM! Storybook import path correctly updated.

The import path has been updated from ./Pagination to ./pagination, maintaining consistency with the kebab-case filename convention.

apps/admin-x-design-system/src/global/table/dynamic-table.stories.tsx (1)

3-7: LGTM! All story import paths correctly updated to kebab-case.

All component imports (DynamicTable, Avatar, Hint, Pagination, Button) have been consistently updated to their kebab-case paths, maintaining alignment with the standardized naming convention.

apps/admin-x-design-system/src/global/modal/confirmation-modal.stories.tsx (1)

5-6: LGTM! Storybook import paths correctly updated to kebab-case.

Both imports for Button and ConfirmationModal have been updated to their kebab-case equivalents (../button and ./confirmation-modal), aligning with the standardized naming convention across modal components.

apps/admin-x-design-system/src/global/modal/confirmation-modal.tsx (1)

1-4: LGTM! Import paths updated to kebab-case.

The import path updates are consistent with the PR's objective to standardize filenames to kebab-case format across the admin design system.

apps/admin-x-design-system/src/global/list.stories.tsx (1)

3-5: LGTM! Storybook imports updated to kebab-case.

The import path updates align with the new kebab-case file naming convention.

apps/admin-x-design-system/src/global/table.tsx (1)

3-9: LGTM! Import paths consistently updated to kebab-case.

All import path updates (use-pagination, heading, hint, loading-indicator, pagination, separator, table-row) follow the kebab-case convention uniformly.

apps/admin-x-design-system/src/global/button-group.tsx (2)

2-5: LGTM! Import paths updated to kebab-case.

The import path updates for button and tooltip components are consistent with the kebab-case naming convention.


57-57: LGTM! Minor formatting improvement.

The spacing around the ternary operator improves readability without changing behavior.

apps/admin-x-design-system/src/global/pagination.tsx (2)

2-3: LGTM! Import paths updated to kebab-case.

The import path updates align with the new file naming convention.


19-21: LGTM! Improved Tailwind utility usage.

Replacing h-[10px] w-[10px] with size-[10px] is a more concise way to specify equal dimensions in Tailwind CSS while maintaining identical behavior.

apps/admin-x-design-system/src/global/layout/page.tsx (1)

2-8: LGTM! Import paths updated to kebab-case.

All import path updates (tab-view, app-menu, global-actions, button, breadcrumbs, page-header) are consistent with the kebab-case naming convention.

apps/admin-x-design-system/src/global/modal/preview-modal.tsx (2)

4-15: LGTM! Import paths updated to kebab-case.

All import path updates across hooks, components, and utilities are consistent with the kebab-case naming convention.


283-283: LGTM! Improved Tailwind utility usage.

Replacing h-full w-full with size-full is more concise while maintaining identical behavior.

@ibalosh ibalosh requested a review from peterzimon December 4, 2025 14:15
@ibalosh
Copy link
Contributor Author

ibalosh commented Dec 4, 2025

hey @peterzimon

this is just a simple rename in design system. It passes all checks, and I took a look manually of storybook stories, they look fine.

If you will have a minute or two, would love if you could take a quick glance through it, just in case you can think of something that could break. Thanks

# Conflicts:
#	apps/admin-x-design-system/src/global/form/html-editor.tsx
#	apps/admin-x-design-system/src/index.ts
@ibalosh ibalosh force-pushed the moved-to-kebab-case-formatting-admin-x-design-system branch from 56178a2 to 06d7c6c Compare December 8, 2025 09:31
@ibalosh ibalosh merged commit 6606ab7 into main Dec 8, 2025
76 of 80 checks passed
@ibalosh ibalosh deleted the moved-to-kebab-case-formatting-admin-x-design-system branch December 8, 2025 11:17
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants