@opencxh/ui-kit 3.98.0 → 3.103.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,26 @@
1
+ import { default as React } from 'react';
2
+ export interface FilterChipProps {
3
+ /** Chip text (e.g. "Status", or "Status: Open" when a value is set). */
4
+ label: React.ReactNode;
5
+ /** Selected/active — renders the filled dark treatment. */
6
+ active?: boolean;
7
+ /** Show a trailing caret (opens a menu the consumer wires with Dropdown/Popover). */
8
+ caret?: boolean;
9
+ /** Open a value clear affordance (✕) — only shown when `active`. */
10
+ onClear?: () => void;
11
+ onClick?: () => void;
12
+ className?: string;
13
+ }
14
+ /**
15
+ * Filter chip — the inbox filter bar and the thread priority/assign/inbox/tags
16
+ * menus. Presentational: it renders the chip (active = filled dark, inactive =
17
+ * outlined) with an optional caret + clear; the consumer wires the actual menu
18
+ * with the existing `Dropdown` / `Popover`.
19
+ *
20
+ * @example
21
+ * ```tsx
22
+ * <FilterChip label={status ? `Status: ${status}` : "Status"} caret
23
+ * active={!!status} onClick={openMenu} onClear={() => setStatus(null)} />
24
+ * ```
25
+ */
26
+ export declare function FilterChip({ label, active, caret, onClear, onClick, className }: FilterChipProps): React.JSX.Element;
@@ -0,0 +1,29 @@
1
+ import { default as React } from 'react';
2
+ export interface SegmentedOption<T extends string> {
3
+ value: T;
4
+ label: React.ReactNode;
5
+ }
6
+ export interface SegmentedToggleProps<T extends string> {
7
+ options: SegmentedOption<T>[];
8
+ value: T;
9
+ onChange: (value: T) => void;
10
+ /** Control height. */
11
+ size?: "sm" | "md";
12
+ className?: string;
13
+ /** Accessible group label. */
14
+ "aria-label"?: string;
15
+ }
16
+ /**
17
+ * Segmented pill toggle (focus "Feed / Eén tegelijk", settings "Persoonlijk /
18
+ * Bedrijf"). The active segment lifts with a subtle shadow. Token-driven.
19
+ *
20
+ * @example
21
+ * ```tsx
22
+ * <SegmentedToggle
23
+ * value={layout}
24
+ * onChange={setLayout}
25
+ * options={[{ value: "feed", label: "Feed" }, { value: "one", label: "Eén tegelijk" }]}
26
+ * />
27
+ * ```
28
+ */
29
+ export declare function SegmentedToggle<T extends string>({ options, value, onChange, size, className, "aria-label": ariaLabel, }: SegmentedToggleProps<T>): React.JSX.Element;
@@ -0,0 +1,24 @@
1
+ import { default as React } from 'react';
2
+ export interface AssistantCardProps extends Omit<React.HTMLAttributes<HTMLDivElement>, "title"> {
3
+ /** Card heading (e.g. "Briefing van je assistent", "Voorstel van de assistent"). */
4
+ title: React.ReactNode;
5
+ /** Leading glyph; defaults to the ✦ sparkle. */
6
+ icon?: React.ReactNode;
7
+ /** Optional action rendered on the header's right (e.g. a "Gebruiken" button). */
8
+ action?: React.ReactNode;
9
+ /** Body content. */
10
+ children?: React.ReactNode;
11
+ }
12
+ /**
13
+ * AI-assistant card shell — the tinted "✦ Briefing / Voorstel van de assistent"
14
+ * surface used on Mijn dag and in the Focus queue. Uses the `--assistant-*`
15
+ * design-system tokens so the tint is mode-aware.
16
+ *
17
+ * @example
18
+ * ```tsx
19
+ * <AssistantCard title="Voorstel van de assistent" action={<Button size="xs">Gebruiken</Button>}>
20
+ * Marc wacht 12 min op WhatsApp — concept staat klaar.
21
+ * </AssistantCard>
22
+ * ```
23
+ */
24
+ export declare function AssistantCard({ title, icon, action, children, className, ...props }: AssistantCardProps): React.JSX.Element;
@@ -0,0 +1,25 @@
1
+ import { default as React } from 'react';
2
+ /** Communication channel keys the redesign colour-codes. */
3
+ export type ChannelKey = "mail" | "wa" | "chat" | "tel" | "note";
4
+ export interface ChannelBadgeProps {
5
+ /** Channel — drives the colour. Unknown/undefined falls back to the neutral "note" tone. */
6
+ channel?: ChannelKey | string;
7
+ /** Glyph or short label inside the tile (e.g. an icon, or an initial). */
8
+ children?: React.ReactNode;
9
+ /** Tile size. */
10
+ size?: "sm" | "md" | "lg";
11
+ className?: string;
12
+ title?: string;
13
+ }
14
+ /**
15
+ * Coloured channel tile (the glyph-in-rounded-square used across inbox rows,
16
+ * the focus queue, the attention list and Recent tabs). Colours come from the
17
+ * `--ch-*` design-system tokens, so it is mode-aware.
18
+ *
19
+ * @example
20
+ * ```tsx
21
+ * <ChannelBadge channel="wa">W</ChannelBadge>
22
+ * <ChannelBadge channel="mail" size="lg"><MailIcon /></ChannelBadge>
23
+ * ```
24
+ */
25
+ export declare function ChannelBadge({ channel, children, size, className, title }: ChannelBadgeProps): React.JSX.Element;
@@ -0,0 +1,19 @@
1
+ import { default as React } from 'react';
2
+ export interface KpiCardProps extends React.HTMLAttributes<HTMLDivElement> {
3
+ /** The big number / metric. */
4
+ value: React.ReactNode;
5
+ /** Caption under the value. */
6
+ label: React.ReactNode;
7
+ /** Tone — `urgent` tints the number + border, `success` tints the number. */
8
+ tone?: "default" | "urgent" | "success";
9
+ }
10
+ /**
11
+ * KPI / stat card (the Mijn dag metric row). Token-driven, mode-aware.
12
+ *
13
+ * @example
14
+ * ```tsx
15
+ * <KpiCard value={3} label="wachten op jou · gem. 1u12" />
16
+ * <KpiCard value={1} label="dreigt SLA te missen" tone="urgent" />
17
+ * ```
18
+ */
19
+ export declare function KpiCard({ value, label, tone, className, ...props }: KpiCardProps): React.JSX.Element;
@@ -0,0 +1,20 @@
1
+ import { default as React } from 'react';
2
+ export interface SourceChipProps {
3
+ /** Label — the linked conversation subject. */
4
+ label: React.ReactNode;
5
+ /** Optional leading dot colour (a `--dot-*` / channel CSS var, or any colour). */
6
+ dotColor?: string;
7
+ /** Click opens the linked conversation. */
8
+ onClick?: () => void;
9
+ className?: string;
10
+ }
11
+ /**
12
+ * Source-conversation chip — the "open brongesprek / gekoppeld gesprek ↗" pill
13
+ * that links a task or focus item back to its conversation.
14
+ *
15
+ * @example
16
+ * ```tsx
17
+ * <SourceChip label="Vraag over factuur maart" dotColor="var(--dot-finance)" onClick={openThread} />
18
+ * ```
19
+ */
20
+ export declare function SourceChip({ label, dotColor, onClick, className }: SourceChipProps): React.JSX.Element;
@@ -0,0 +1,27 @@
1
+ import { default as React } from 'react';
2
+ export interface EmptyStateProps extends Omit<React.HTMLAttributes<HTMLDivElement>, "title"> {
3
+ /** Leading glyph or icon (e.g. a check for the focus "queue empty" state). */
4
+ icon?: React.ReactNode;
5
+ /** Tint of the icon disc. */
6
+ tone?: "neutral" | "success";
7
+ /** Headline. */
8
+ title: React.ReactNode;
9
+ /** Supporting copy. */
10
+ description?: React.ReactNode;
11
+ /** Action buttons row. */
12
+ actions?: React.ReactNode;
13
+ /** Render inside a raised card (focus "done" state) vs. plain centered block. */
14
+ card?: boolean;
15
+ }
16
+ /**
17
+ * Centered empty / completion state (focus queue done, no-results lists).
18
+ *
19
+ * @example
20
+ * ```tsx
21
+ * <EmptyState card tone="success" icon="✓"
22
+ * title="Wachtrij leeg — 7 afgehandeld"
23
+ * description="Nieuwe gesprekken verschijnen hier vanzelf."
24
+ * actions={<Button>Terug naar Mijn dag</Button>} />
25
+ * ```
26
+ */
27
+ export declare function EmptyState({ icon, tone, title, description, actions, card, className, ...props }: EmptyStateProps): React.JSX.Element;
@@ -0,0 +1,14 @@
1
+ import { default as React } from 'react';
2
+ export interface KbdProps extends React.HTMLAttributes<HTMLElement> {
3
+ /** Key label, e.g. "⌘K", "E", "↵". */
4
+ children: React.ReactNode;
5
+ }
6
+ /**
7
+ * Keyboard-shortcut chip (the `⌘K` / `E` / `↵` hints in the redesign).
8
+ *
9
+ * @example
10
+ * ```tsx
11
+ * Zoeken <Kbd>⌘K</Kbd>
12
+ * ```
13
+ */
14
+ export declare function Kbd({ children, className, ...props }: KbdProps): React.JSX.Element;
@@ -0,0 +1,20 @@
1
+ import { default as React } from 'react';
2
+ export interface ProgressBarProps extends React.HTMLAttributes<HTMLDivElement> {
3
+ /** Completion 0–100 (clamped). */
4
+ value: number;
5
+ /** Fill tone. */
6
+ variant?: "accent" | "success";
7
+ /** Track height. */
8
+ size?: "sm" | "md";
9
+ }
10
+ /**
11
+ * Slim determinate progress bar (focus queue progress, subtask completion).
12
+ * Token-driven and mode-aware.
13
+ *
14
+ * @example
15
+ * ```tsx
16
+ * <ProgressBar value={40} />
17
+ * <ProgressBar value={3 / 7 * 100} variant="success" size="sm" />
18
+ * ```
19
+ */
20
+ export declare function ProgressBar({ value, variant, size, className, ...props }: ProgressBarProps): React.JSX.Element;
@@ -4,7 +4,9 @@ export { ParticipantTile, type ParticipantTileProps } from './meeting/Participan
4
4
  export { VideoSurface, type VideoSurfaceProps } from './meeting/VideoSurface';
5
5
  export { Button, type ButtonProps } from './action/Button';
6
6
  export { ButtonGroup, type ButtonGroupProps } from './action/ButtonGroup';
7
+ export { FilterChip, type FilterChipProps } from './action/FilterChip';
7
8
  export { Link, type LinkProps } from './action/Link';
9
+ export { SegmentedToggle, type SegmentedToggleProps, type SegmentedOption } from './action/SegmentedToggle';
8
10
  export { SplitButton, type SplitButtonProps, type SplitButtonOption } from './action/SplitButton';
9
11
  export { Checkbox, type CheckboxProps } from './input/Checkbox';
10
12
  export { DatePicker, type DatePickerProps } from './input/DatePicker';
@@ -20,10 +22,17 @@ export { Modal, type ModalProps } from './overlays/Modal';
20
22
  export { Popover, type PopoverProps } from './overlays/Popover';
21
23
  export { Badge, type BadgeProps } from './feedback/Badge';
22
24
  export { ContentLoading } from './feedback/ContentLoading';
25
+ export { EmptyState, type EmptyStateProps } from './feedback/EmptyState';
26
+ export { Kbd, type KbdProps } from './feedback/Kbd';
27
+ export { ProgressBar, type ProgressBarProps } from './feedback/ProgressBar';
23
28
  export { Spinner, type SpinnerProps } from './feedback/Spinner';
29
+ export { AssistantCard, type AssistantCardProps } from './content/AssistantCard';
24
30
  export { Avatar, type AvatarProps } from './content/Avatar';
25
31
  export { AvatarStack, type AvatarStackProps, type AvatarStackPerson } from './content/AvatarStack';
32
+ export { ChannelBadge, type ChannelBadgeProps, type ChannelKey } from './content/ChannelBadge';
26
33
  export { Icon, type IconProps } from './content/Icon';
34
+ export { KpiCard, type KpiCardProps } from './content/KpiCard';
35
+ export { SourceChip, type SourceChipProps } from './content/SourceChip';
27
36
  export { Image, type ImageProps } from './content/Image';
28
37
  export { PageHeader, type PageHeaderAction, type PageHeaderProps } from './content/PageHeader';
29
38
  export { PageToolbar, type PageToolbarProps } from './content/PageToolbar';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@opencxh/ui-kit",
3
- "version": "3.98.0",
3
+ "version": "3.103.0",
4
4
  "description": "Theme-aware UI component library for OpenCXH platform",
5
5
  "type": "module",
6
6
  "exports": {