Skip to content

9.0.0-beta.1

Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 30 Mar 13:50
· 350 commits to main since this release
e24cab2

@comet/admin@9.0.0-beta.1

Minor Changes

  • 8c2fdde: Add filtering and sorting to DependenciesList and DependentsList

    Users can now filter dependencies/dependents by name, type, secondary information, and visibility, and sort by all columns. A default filter shows only visible items. The GqlFilter type is now exported from @comet/admin.

    Breaking changes:

    @comet/cms-api: DependencyFilter.targetGraphqlObjectType and DependentFilter.rootGraphqlObjectType changed from string to StringFilter. Update any code passing a plain string to use { equal: "..." } instead.

    @comet/cms-api: DependenciesService.getDependents() and getDependencies() consolidated the filter, paginationArgs, and options parameters into a single options object. If you call these methods directly, merge the arguments:

    // Before
    service.getDependents(target, filter, { offset, limit }, { forceRefresh, sort });
    
    // After
    service.getDependents(target, { filter, offset, limit, forceRefresh, sort });

    @comet/cms-admin: The GQL queries passed to DependenciesList and DependentsList must now accept $filter and $sort variables and forward them to the dependencies/dependents field. Update your queries as follows:

    # DependentsList
    query MyDependents($id: ID!, $offset: Int!, $limit: Int!, $forceRefresh: Boolean = false, $filter: DependentFilter, $sort: [DependencySort!]) {
        item: myEntity(id: $id) {
            id
            dependents(offset: $offset, limit: $limit, forceRefresh: $forceRefresh, filter: $filter, sort: $sort) {
                nodes {
                    rootGraphqlObjectType
                    rootId
                    rootColumnName
                    jsonPath
                    name
                    secondaryInformation
                    visible
                }
                totalCount
            }
        }
    }
    
    # DependenciesList
    query MyDependencies($id: ID!, $offset: Int!, $limit: Int!, $forceRefresh: Boolean = false, $filter: DependencyFilter, $sort: [DependencySort!]) {
        item: myEntity(id: $id) {
            id
            dependencies(offset: $offset, limit: $limit, forceRefresh: $forceRefresh, filter: $filter, sort: $sort) {
                nodes {
                    targetGraphqlObjectType
                    targetId
                    rootColumnName
                    jsonPath
                    name
                    secondaryInformation
                    visible
                }
                totalCount
            }
        }
    }
  • 8e3a074: New helper: downloadFile, to be used instead of file-saver dependency

@comet/cms-admin@9.0.0-beta.1

Major Changes

  • 8c2fdde: Add filtering and sorting to DependenciesList and DependentsList

    Users can now filter dependencies/dependents by name, type, secondary information, and visibility, and sort by all columns. A default filter shows only visible items. The GqlFilter type is now exported from @comet/admin.

    Breaking changes:

    @comet/cms-api: DependencyFilter.targetGraphqlObjectType and DependentFilter.rootGraphqlObjectType changed from string to StringFilter. Update any code passing a plain string to use { equal: "..." } instead.

    @comet/cms-api: DependenciesService.getDependents() and getDependencies() consolidated the filter, paginationArgs, and options parameters into a single options object. If you call these methods directly, merge the arguments:

    // Before
    service.getDependents(target, filter, { offset, limit }, { forceRefresh, sort });
    
    // After
    service.getDependents(target, { filter, offset, limit, forceRefresh, sort });

    @comet/cms-admin: The GQL queries passed to DependenciesList and DependentsList must now accept $filter and $sort variables and forward them to the dependencies/dependents field. Update your queries as follows:

    # DependentsList
    query MyDependents($id: ID!, $offset: Int!, $limit: Int!, $forceRefresh: Boolean = false, $filter: DependentFilter, $sort: [DependencySort!]) {
        item: myEntity(id: $id) {
            id
            dependents(offset: $offset, limit: $limit, forceRefresh: $forceRefresh, filter: $filter, sort: $sort) {
                nodes {
                    rootGraphqlObjectType
                    rootId
                    rootColumnName
                    jsonPath
                    name
                    secondaryInformation
                    visible
                }
                totalCount
            }
        }
    }
    
    # DependenciesList
    query MyDependencies($id: ID!, $offset: Int!, $limit: Int!, $forceRefresh: Boolean = false, $filter: DependencyFilter, $sort: [DependencySort!]) {
        item: myEntity(id: $id) {
            id
            dependencies(offset: $offset, limit: $limit, forceRefresh: $forceRefresh, filter: $filter, sort: $sort) {
                nodes {
                    targetGraphqlObjectType
                    targetId
                    rootColumnName
                    jsonPath
                    name
                    secondaryInformation
                    visible
                }
                totalCount
            }
        }
    }
  • 85b09a2: Replace DependencyList with DependenciesList and DependentsList

    Breaking change: DependencyList has been removed. Use DependenciesList for queries returning item.dependencies and DependentsList for queries returning item.dependents.

  • 171c335: Redirects: add domain source type

    To fully support domain redirects, additional handling is required in the site middleware.

@comet/cms-api@9.0.0-beta.1

Major Changes

  • 8c2fdde: Add filtering and sorting to DependenciesList and DependentsList

    Users can now filter dependencies/dependents by name, type, secondary information, and visibility, and sort by all columns. A default filter shows only visible items. The GqlFilter type is now exported from @comet/admin.

    Breaking changes:

    @comet/cms-api: DependencyFilter.targetGraphqlObjectType and DependentFilter.rootGraphqlObjectType changed from string to StringFilter. Update any code passing a plain string to use { equal: "..." } instead.

    @comet/cms-api: DependenciesService.getDependents() and getDependencies() consolidated the filter, paginationArgs, and options parameters into a single options object. If you call these methods directly, merge the arguments:

    // Before
    service.getDependents(target, filter, { offset, limit }, { forceRefresh, sort });
    
    // After
    service.getDependents(target, { filter, offset, limit, forceRefresh, sort });

    @comet/cms-admin: The GQL queries passed to DependenciesList and DependentsList must now accept $filter and $sort variables and forward them to the dependencies/dependents field. Update your queries as follows:

    # DependentsList
    query MyDependents($id: ID!, $offset: Int!, $limit: Int!, $forceRefresh: Boolean = false, $filter: DependentFilter, $sort: [DependencySort!]) {
        item: myEntity(id: $id) {
            id
            dependents(offset: $offset, limit: $limit, forceRefresh: $forceRefresh, filter: $filter, sort: $sort) {
                nodes {
                    rootGraphqlObjectType
                    rootId
                    rootColumnName
                    jsonPath
                    name
                    secondaryInformation
                    visible
                }
                totalCount
            }
        }
    }
    
    # DependenciesList
    query MyDependencies($id: ID!, $offset: Int!, $limit: Int!, $forceRefresh: Boolean = false, $filter: DependencyFilter, $sort: [DependencySort!]) {
        item: myEntity(id: $id) {
            id
            dependencies(offset: $offset, limit: $limit, forceRefresh: $forceRefresh, filter: $filter, sort: $sort) {
                nodes {
                    targetGraphqlObjectType
                    targetId
                    rootColumnName
                    jsonPath
                    name
                    secondaryInformation
                    visible
                }
                totalCount
            }
        }
    }
  • 3f3da52: Switch to SQL-based entity info system

    The @EntityInfo decorator now accepts a field-path-based object or a raw SQL string instead of a TypeScript function or service class.
    This enables efficient SQL-level filtering and sorting of dependencies and warnings based on entity info.

    Breaking changes:

    • @EntityInfo decorator API changed: now accepts { name, secondaryInformation?, visible? } with dot-notation field paths, or a raw SQL string
    • EntityInfoServiceInterface has been removed from exports
    • PageTreeNodeDocumentEntityInfoService has been removed; @EntityInfo on Page, Link, and similar document entities is no longer needed
    • block_index_dependencies view exposes two new columns blockVisible and entityVisible; visible is now their logical AND (previously only reflected block-level visibility)
    • block_index_dependencies view now includes rootName, rootSecondaryInformation, targetName, and targetSecondaryInformation columns from EntityInfo, removing the need for a runtime JOIN when querying dependencies/dependents
  • 171c335: Redirects: add domain source type

    To fully support domain redirects, additional handling is required in the site middleware.

Patch Changes

  • 19a0528: Fix MailerLogStatus GQL enum name (was incorrectly registered as WarningStatus)

  • f162fa5: Fix AzureOpenAiContentGenerationService for newer GPT models

    We still used the deprecated max_tokens that isn't supported anymore by newer models.
    Replaced it with the newer max_completion_tokens.

@comet/eslint-config@9.0.0-beta.1

Patch Changes

  • 4b1d586: Fix missing Rules of React in @comet/eslint-config/nextjs.js

@comet/mail-react@9.0.0-beta.1

Minor Changes

  • 6104af6: Add MjmlMailRoot component that provides the standard email skeleton (<Mjml>, <MjmlHead>, <MjmlBody>) with zero-padding defaults

  • ea8bbe6: Add disableResponsiveBehavior and slotProps props to MjmlSection

  • ed3b395: Add registerStyles for component-level responsive CSS

    Register CSS styles at module scope via registerStyles. Registered styles are automatically rendered as <mj-style> elements in <MjmlHead> by MjmlMailRoot. Styles can be static CSS strings or functions that receive the active theme.

  • 5e626ca: Add renderMailHtml function via /server and /client sub-path exports

    The new renderMailHtml function handles the full React → MJML → HTML pipeline in a single call, returning { html, mjmlWarnings }.
    Use @comet/mail-react/server in Node.js environments and @comet/mail-react/client in browser environments.

    Example

    // In a Node.js context (e.g. email sending service):
    import { renderMailHtml } from "@comet/mail-react/server";
    
    const { html, mjmlWarnings } = renderMailHtml(<MyEmail />);
    // In a browser context (e.g. Storybook, preview):
    import { renderMailHtml } from "@comet/mail-react/client";
    
    const { html, mjmlWarnings } = renderMailHtml(<MyEmail />);
  • ed3b395: Add ResponsiveValue<T> type with getDefaultFromResponsiveValue and getResponsiveOverrides helpers

    Generic type for breakpoint-aware theme tokens. A ResponsiveValue is either a plain value or an object keyed by breakpoint names with a required default. The helpers resolve the default value for inline styles and extract per-breakpoint overrides for media queries.

    Use this when augmenting the theme with values that should vary per breakpoint, e.g. a custom titleFontSize: ResponsiveValue.

  • ed3b395: Add indent prop to MjmlSection for content indentation

    MjmlSection now accepts an optional indent boolean prop that applies left/right padding based on theme.sizes.contentIndentation. The default indentation is applied as inline padding, with responsive overrides via registered media queries.

  • 2e9b518: Add Storybook addon preset at @comet/mail-react/storybook

    Consumers add a single line to .storybook/main.ts to get a complete mail development setup:

    const config: StorybookConfig = {
        addons: ["@comet/mail-react/storybook"],
    };

    The preset auto-registers:

    • A mail renderer decorator that wraps stories in <MjmlMailRoot> and renders them to HTML
    • A "Copy Mail HTML" toolbar button to copy the rendered email HTML to the clipboard
    • A "Use public image URLs" toggle to replace image sources with public placeholder URLs (useful for testing on external services like Email on Acid)
    • An "MJML Warnings" panel showing validation warnings with a badge count
  • 59e9904: Add theme system with createTheme, ThemeProvider, and useTheme

    createTheme produces a Theme with layout design tokens (sizes.bodyWidth, breakpoints.default, breakpoints.mobile). Pass an overrides object to customize sizes and breakpoints — breakpoint values are constructed with createBreakpoint. All theme interfaces support TypeScript module augmentation for project-specific extensions.

    MjmlMailRoot now accepts an optional theme prop. When provided, it sets the email body width and MJML responsive breakpoint from the theme.

@comet/site-nextjs@9.0.0-beta.1

Patch Changes

  • 865fcfd: Remove legacy CJS fields (module, types) from package.json as these packages are ESM-only

@comet/site-react@9.0.0-beta.1

Patch Changes

  • 865fcfd: Remove legacy CJS fields (module, types) from package.json as these packages are ESM-only