9.0.0-beta.5
Pre-release@comet/admin@9.0.0-beta.5
Patch Changes
-
fdabaf1: Fix
MainContentwithfullHeightgrowing past the viewport after returning from a scrolled detail pageuseTopOffsetusedgetBoundingClientRect().top, which is viewport-relative. When navigating back from a scrolled page, the browser could restore the previous scroll position before the offset was measured, producing a too-small offset and acalc(100vh - topOffset)larger than the viewport. The offset is now measured relative to the document by addingwindow.scrollY.
@comet/cms-admin@9.0.0-beta.5
Minor Changes
- c0cee12: Add
placeholdersoption tocreateTipTapRichTextBlockthat allows inserting pre-defined placeholder tokens into the rich text editor. Placeholders are rendered as non-editable chips and can only be removed as a whole unit. - 8cb0844: Export
isLinkTargetandvalidateLinkTarget - 8ad9dd8: Add support for deleting multiple redirects in the grid
Patch Changes
-
3cbf0ff: Show
ArchivedTagnext to the title on the DAM file detail pagePreviously the archived state was only visible in the DAM file list, which could be confusing when opening an archived file's detail page via link.
-
5d006c1: Fix
1-NaN of NaNpagination footer androwCountwarning in DAMFolderDataGridThe grid now routes
totalCountthroughuseBufferedRowCount, sorowCountstays a number across refetches instead of becomingundefinedwhile data is loading.
@comet/agent-features@9.0.0-beta.5
Minor Changes
- ca5b0fa: Add
@comet/agent-featurespackage containing skills and rules for AI coding agents
@comet/cms-api@9.0.0-beta.5
Minor Changes
- c0cee12: Add
placeholdersoption tocreateTipTapRichTextBlockthat allows inserting pre-defined placeholder tokens into the rich text editor. Placeholders are rendered as non-editable chips and can only be removed as a whole unit. - 9d5f045: Add a
urlTemplatefield resolver toFileImagesResolver - b0ceb9c: Export
IsLinkTargetvalidator - 8ad9dd8: Add support for deleting multiple redirects in the grid
Patch Changes
-
6b7adc7: Fix
damFilesListreturning no files in subfolders when filtering byidsdamFilesListimplicitly constrains to the scope root when nofolderIdis passed. The constraint already had an escape hatch forfilter.searchText; the same now applies tofilter.ids. Resolving a selection viafilter: { ids: ... }returns all matching files regardless of which folder they live in, which unblocks the adminFileFieldmulti-select for files in subfolders. -
a2c2eb5: Log the reason when a permission check denies access
AbstractAccessControlService.isEqualOrMorePermissionsnow emits a NestJSLogger.debugline identifying the missing permission or content scope whenever it returnsfalse. TheimpersonationAllowedresolver field additionally logs when a user attempts to impersonate themselves.
@comet/cli@9.0.0-beta.5
Minor Changes
-
644b4ee: Add node_modules skills and rules discovery to
install-agent-featurescommandThe command now scans direct dependencies in
node_modules(including@scopedpackages) forskills/andrules/directories and creates symlinks to agent-specific directories. This is compatible with the npm-based Agent Skills convention and extends it to also support rules.
@comet/eslint-config@9.0.0-beta.5
Major Changes
-
f51972c: Enable
@graphql-eslint/naming-conventioninreact.jsandnextjs.jsGraphQL code generation appends the operation kind (
Fragment,Query,Mutation,Subscription) to the generated TypeScript type name. Naming an operationFooFragment/FooQuerytherefore produces duplicated types likeGQLFooFragmentFragment/GQLFooQueryQuery. The@graphql-eslint/naming-conventionrule from@graphql-eslint/eslint-pluginreports such names insidegql/graphql-tagged template literals.
@comet/mail-react@9.0.0-beta.5
Major Changes
-
568ee9a:
MjmlImageis now responsive by defaultThe inner
<img>height scales toautobelow the default breakpoint instead of staying at its declared pixel value, so the image keeps its aspect ratio as its width shrinks on narrow viewports. -
f503e9e:
MjmlDividernow supportsvariant,height,backgroundColor, andbackgroundImageprops, configured throughtheme.divider-
theme.dividerdefines the defaultheightandbackgroundColor -
theme.divider.variantsoverrides those values for named variants, optionally with per-breakpoint responsive values -
theme.divider.backgroundImage(typically a gradient) overlays the bar whilebackgroundColorstays as the solid fallback for clients that don't render gradients -
Per-instance
height,backgroundColor, andbackgroundImageprops override the resolved theme/variant valuesExample theme
import { createTheme } from "@comet/mail-react"; const theme = createTheme({ divider: { defaultVariant: "thin", variants: { thin: { height: "1px", backgroundColor: "#999999" }, thick: { height: { default: "12px", mobile: "8px" }, backgroundColor: "#222222" }, gradient: { backgroundColor: "#5B4FC7", backgroundImage: "linear-gradient(to right, #5B4FC7, #FF6B6B, #FFD166)", }, }, }, }); declare module "@comet/mail-react" { interface DividerVariants { thin: true; thick: true; gradient: true; } }
Usage:
import { MjmlDivider, MjmlMailRoot } from "@comet/mail-react"; <MjmlMailRoot theme={theme}> <MjmlSection> <MjmlColumn> <MjmlDivider /> <MjmlDivider variant="thick" /> <MjmlDivider variant="gradient" /> <MjmlDivider height="2px" backgroundColor="#FF0000" /> </MjmlColumn> </MjmlSection> </MjmlMailRoot>;
Breaking changes
-
The
MjmlDividerprop surface no longer acceptsborderWidth,borderColor,borderStyle,paddingand its variants,width,containerBackgroundColor,align, orcssClass. MigrateborderWidthtoheightandborderColortobackgroundColor, either per-call or ontheme.divider. -
MjmlDividerno longer applies any default padding around the divider. Add spacing through the surrounding section or column (for example withMjmlSpacer). -
<MjmlAttributes><MjmlDivider … /></MjmlAttributes>no longer sets defaults forMjmlDivider. Configure defaults throughtheme.dividerinstead.
-
Minor Changes
-
f503e9e: Add
HtmlDividercomponent for rendering a themed divider inside MJML ending tags or outside the MJML contextHtmlDividerreadsheight,backgroundColor, andbackgroundImagefromtheme.divider, and supports named variants with per-breakpoint responsive overrides — the same shape astheme.text. Per-instanceheight,backgroundColor, andbackgroundImageprops override the resolved theme/variant values. AbackgroundImage(typically a gradient) overlays the bar whilebackgroundColorstays as the solid fallback for clients that don't render gradients.import { HtmlDivider } from "@comet/mail-react"; <MjmlRaw> <HtmlDivider /> <HtmlDivider variant="thick" /> <HtmlDivider height="2px" backgroundColor="#FF0000" /> <HtmlDivider backgroundImage="linear-gradient(to right, red, blue)" /> </MjmlRaw>;
Example theme
import { createTheme } from "@comet/mail-react"; const theme = createTheme({ divider: { defaultVariant: "thin", variants: { thin: { height: "1px", backgroundColor: "#999999" }, thick: { height: { default: "12px", mobile: "8px" }, backgroundColor: "#222222" }, gradient: { backgroundColor: "#5B4FC7", backgroundImage: "linear-gradient(to right, #5B4FC7, #FF6B6B, #FFD166)", }, }, }, }); declare module "@comet/mail-react" { interface DividerVariants { thin: true; thick: true; gradient: true; } }
-
568ee9a: Add
HtmlImagecomponentRenders an
<img>tag that adapts to its container width below the default breakpoint. Use within raw HTML context — HTML-only emails or MJML ending tags likeMjmlRaw.import { HtmlImage } from "@comet/mail-react"; <HtmlImage src="https://example.com/banner.png" width="600" height="300" alt="Banner" />;
@comet/site-react@9.0.0-beta.5
Patch Changes
-
cfa70a2: Fix preview-image to playback transition in video blocks
DamVideoBlock: clicking the preview image's play button now starts video playback. Previously, the click dismissed the preview but the browser's autoplay policy blocked playback of videos with sound because the gesture happened on the preview image rather than the<video>element. Playback is now triggered explicitly inside the ref callback to stay within the user gesture window.YouTubeVideoBlock/VimeoVideoBlock: when the preview image is dismissed,isPlayingis now set totruesoPlayPauseButtonshows the correct icon, and the playback is flagged as manually handled so the viewport handler does not immediately pause the video.
-
4f018d5: Fix
VimeoVideoBlocknot autoplaying on initial page load whenautoplayis enabled and nopreviewImageis setWithout a
previewImage, the iframe URL was missingautoplay=1and playback relied on apostMessage("play")fired from theIntersectionObservercallback. That message raced against the Vimeo player's initialization inside the iframe — when it arrived first the message was dropped and the video stayed paused, while thePlayPauseButtonoptimistically showed the "Pause" state, requiring two clicks to recover.autoplay=1is now appended wheneverautoplayis enabled so Vimeo handles autoplay natively. The existingmuted=1param satisfies the browser autoplay policy.The iframe is also marked with
loading="lazy"so blocks far below the fold don't request the Vimeo player upfront.