Single-click original preview in the composer rail and chat history; remove control inside the thumbnail, revealed on hover/focus (always on touch); hidden-scrollbar rail overflow paged by edge arrows with wheel panning and end-reveal on add; image-intake rejections and prompt failures announce as a transient top-center toast instead of inline strips. The attachment atoms move to a new zero-cordis package @deepseek-ai/dsh-client-ui-attachment (rail, message gallery, lightbox), seeded as a platform module; the toast is a ui-primitives atom. Strings arrive as label props bridged from the conversation dictionary.
32 lines
1.1 KiB
TypeScript
32 lines
1.1 KiB
TypeScript
/**
|
|
* Package-owned invariant companion for `@deepseek-ai/dsh-client-ui-attachment`.
|
|
* @module @deepseek-ai/dsh-client-ui-attachment/invariant
|
|
*/
|
|
|
|
/* jscpd:ignore-start */
|
|
import type { Context } from '@deepseek-ai/cordis'
|
|
import type { InvariantInstaller } from '@deepseek-ai/dsh-invariants'
|
|
|
|
const PACKAGE_NAME = '@deepseek-ai/dsh-client-ui-attachment'
|
|
|
|
/** Cordis companion plugin name. */
|
|
export const name = 'client-ui-attachment-invariant'
|
|
/** Service required before the companion can reserve package ownership. */
|
|
export const inject = ['invariants']
|
|
|
|
/**
|
|
* No runtime invariant: pure props-in React atoms with no Cordis API —
|
|
* no events, no services, no mutable cross-plugin state; rendering contracts
|
|
* are asserted directly by this package's component specs.
|
|
*/
|
|
const install: InvariantInstaller = () => {}
|
|
|
|
/**
|
|
* Register this package's invariant companion.
|
|
* @param ctx - Cordis context carrying the invariant service.
|
|
* @returns the installed registration's disposer after setup succeeds.
|
|
*/
|
|
export const apply = (ctx: Context): Promise<() => void> =>
|
|
Promise.resolve(ctx.invariants.register(PACKAGE_NAME, install))
|
|
/* jscpd:ignore-end */
|