@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.
- package/dist/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +1622 -1412
- package/dist/index.js.map +1 -1
- package/dist/src/action/FilterChip.d.ts +26 -0
- package/dist/src/action/SegmentedToggle.d.ts +29 -0
- package/dist/src/content/AssistantCard.d.ts +24 -0
- package/dist/src/content/ChannelBadge.d.ts +25 -0
- package/dist/src/content/KpiCard.d.ts +19 -0
- package/dist/src/content/SourceChip.d.ts +20 -0
- package/dist/src/feedback/EmptyState.d.ts +27 -0
- package/dist/src/feedback/Kbd.d.ts +14 -0
- package/dist/src/feedback/ProgressBar.d.ts +20 -0
- package/dist/src/index.d.ts +9 -0
- package/package.json +1 -1
|
@@ -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;
|
package/dist/src/index.d.ts
CHANGED
|
@@ -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';
|