@opencxh/ui-kit 3.172.0 → 3.175.2
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 +2 -2
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +5040 -5072
- package/dist/index.js.map +1 -1
- package/dist/src/action/Button.d.ts +3 -3
- package/dist/src/action/ButtonGroup.d.ts +2 -2
- package/dist/src/action/Link.d.ts +3 -3
- package/dist/src/action/SplitButton.d.ts +10 -10
- package/dist/src/content/ArtifactView.d.ts +1 -1
- package/dist/src/content/Avatar.d.ts +7 -15
- package/dist/src/content/ChannelBadge.d.ts +1 -1
- package/dist/src/content/Icon.d.ts +3 -3
- package/dist/src/content/Image.d.ts +3 -3
- package/dist/src/content/MessageBubble.d.ts +4 -13
- package/dist/src/content/Page.d.ts +8 -28
- package/dist/src/content/PageHeader.d.ts +0 -19
- package/dist/src/content/PageToolbar.d.ts +0 -2
- package/dist/src/content/RichText.d.ts +5 -8
- package/dist/src/content/SectionDivider.d.ts +1 -1
- package/dist/src/content/SettingsPage.d.ts +6 -10
- package/dist/src/content/tableColumns.d.ts +6 -8
- package/dist/src/federated-resource/index.d.ts +5 -7
- package/dist/src/feedback/Badge.d.ts +4 -41
- package/dist/src/feedback/EmptyState.d.ts +1 -11
- package/dist/src/feedback/Kbd.d.ts +1 -8
- package/dist/src/feedback/ProgressBar.d.ts +0 -6
- package/dist/src/feedback/Spinner.d.ts +4 -26
- package/dist/src/feedback/StatusDot.d.ts +1 -12
- package/dist/src/feedback/StepIndicator.d.ts +1 -9
- package/dist/src/forms/Form.d.ts +39 -37
- package/dist/src/index.d.ts +49 -49
- package/dist/src/input/Checkbox.d.ts +5 -32
- package/dist/src/input/DatePicker.d.ts +2 -15
- package/dist/src/input/SearchField.d.ts +0 -5
- package/dist/src/input/SearchableTextField.d.ts +3 -4
- package/dist/src/input/Select.d.ts +2 -2
- package/dist/src/input/StorageInput.d.ts +1 -1
- package/dist/src/input/TextArea.d.ts +4 -29
- package/dist/src/input/TextField.d.ts +5 -42
- package/dist/src/meeting/MeetingGrid.d.ts +20 -19
- package/dist/src/meeting/ParticipantTile.d.ts +5 -9
- package/dist/src/meeting/VideoSurface.d.ts +1 -1
- package/dist/src/navigation/Sidebar.d.ts +15 -19
- package/dist/src/navigation/Tabs.d.ts +2 -2
- package/dist/src/overlays/ConfirmDialog.d.ts +0 -13
- package/dist/src/overlays/Dropdown.d.ts +1 -19
- package/dist/src/overlays/Modal.d.ts +4 -68
- package/dist/src/overlays/Popover.d.ts +0 -2
- package/dist/src/primitives/Box.d.ts +7 -7
- package/dist/src/test/setup.d.ts +0 -0
- package/dist/src/typography/Heading.d.ts +4 -4
- package/dist/src/typography/Text.d.ts +7 -7
- package/package.json +8 -8
package/dist/src/forms/Form.d.ts
CHANGED
|
@@ -1,43 +1,32 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { InvokeOptions } from '@opencxh/domain';
|
|
2
2
|
import { default as React } from 'react';
|
|
3
3
|
export type FormFieldType = "text" | "email" | "password" | "number" | "tel" | "url" | "color" | "textarea" | "select" | "segmented" | "checkbox" | "radio" | "date" | "file" | "folder" | "custom" | "array";
|
|
4
4
|
/**
|
|
5
5
|
* `NonNullable` before the `object` test is load-bearing: form data is routinely
|
|
6
|
-
* a `Partial<T>`,
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
* the kind of size at which TypeScript gives up (see {@link FieldPath}).
|
|
13
|
-
*
|
|
14
|
-
* `T extends unknown ?` makes this distribute over unions. Without it a
|
|
15
|
-
* discriminated union like `OwnerScope` only contributes the keys its members
|
|
16
|
-
* share (`keyof (A | B)` is an intersection), so `ownerScope.teamId` is
|
|
17
|
-
* unspellable even though a `kind: "team"` conditional field needs exactly that.
|
|
6
|
+
* a `Partial<T>`, and `Address | undefined extends object` is false — without it
|
|
7
|
+
* every nested path silently disappears and only top-level keys survive.
|
|
8
|
+
* Arrays, Dates and functions are leaves; recursing into them blows the union
|
|
9
|
+
* past what TypeScript will infer (see {@link FieldPath}).
|
|
10
|
+
* `T extends unknown ?` distributes over unions: `keyof (A | B)` keeps only
|
|
11
|
+
* shared keys, so `ownerScope.teamId` would otherwise be unspellable.
|
|
18
12
|
*/
|
|
19
13
|
type NestedKeys<T> = T extends unknown ? {
|
|
20
14
|
[K in keyof T]-?: NonNullable<T[K]> extends readonly unknown[] | Date | ((...args: never[]) => unknown) ? K & string : NonNullable<T[K]> extends object ? `${K & string}.${NestedKeys<NonNullable<T[K]>>}` : K & string;
|
|
21
15
|
}[keyof T] : never;
|
|
22
16
|
/**
|
|
23
|
-
* What a field may be named: any leaf path, plus any top-level key.
|
|
24
|
-
*
|
|
25
|
-
*
|
|
26
|
-
*
|
|
27
|
-
*
|
|
28
|
-
* separate union rather than folded into `NestedKeys` itself: doing it inside
|
|
29
|
-
* the recursion doubles the union at every level, and TypeScript quietly gives
|
|
30
|
-
* up on inferring `group.items` once it gets large enough.
|
|
17
|
+
* What a field may be named: any leaf path, plus any top-level key. The second
|
|
18
|
+
* half exists for `type: "custom"` fields, which own a whole sub-object and
|
|
19
|
+
* would otherwise be unspellable, since `NestedKeys` only reaches leaves. Kept
|
|
20
|
+
* as a separate union: folding it into the recursion doubles the union at every
|
|
21
|
+
* level, and TypeScript quietly gives up inferring it once it gets large.
|
|
31
22
|
*/
|
|
32
23
|
type FieldPath<T> = NestedKeys<T> | (keyof T & string);
|
|
33
24
|
/**
|
|
34
25
|
* One band of a page-wide form: a fixed label column with the section title and
|
|
35
|
-
* its explanation, and the fields beside it.
|
|
36
|
-
*
|
|
37
|
-
*
|
|
38
|
-
*
|
|
39
|
-
* above it. Without this those sections each re-derive the column width and the
|
|
40
|
-
* spacing, and they drift.
|
|
26
|
+
* its explanation, and the fields beside it. Exported because a page often has
|
|
27
|
+
* a section that is not a `Form` field at all — a checklist, linked records —
|
|
28
|
+
* that must line up with the bands above it; without this each re-derives the
|
|
29
|
+
* column width and spacing, and they drift.
|
|
41
30
|
*/
|
|
42
31
|
export declare function FormSection({ title, description, className, children, }: {
|
|
43
32
|
title?: string;
|
|
@@ -60,9 +49,8 @@ export interface FormGroupItem<T = any> {
|
|
|
60
49
|
/** Placeholder text */
|
|
61
50
|
placeholder?: string;
|
|
62
51
|
/**
|
|
63
|
-
* Visible rows for `textarea`. Defaults to 4
|
|
64
|
-
*
|
|
65
|
-
* back while editing (a system prompt).
|
|
52
|
+
* Visible rows for `textarea`. Defaults to 4 — right for a note, far too small
|
|
53
|
+
* for a field someone reads back while editing (a system prompt).
|
|
66
54
|
*/
|
|
67
55
|
rows?: number;
|
|
68
56
|
/**
|
|
@@ -86,9 +74,9 @@ export interface FormGroupItem<T = any> {
|
|
|
86
74
|
/** Remove field from form data when empty */
|
|
87
75
|
removeIfEmpty?: boolean;
|
|
88
76
|
/**
|
|
89
|
-
*
|
|
90
|
-
*
|
|
91
|
-
*
|
|
77
|
+
* Explanation under the field: why it exists, or what the choice implies. For
|
|
78
|
+
* fields whose label cannot fully pose the question — a group `description` is
|
|
79
|
+
* too coarse once a group has several fields.
|
|
92
80
|
*/
|
|
93
81
|
help?: string;
|
|
94
82
|
/** Whether field is hidden */
|
|
@@ -119,8 +107,7 @@ export interface FormGroup<T = any> {
|
|
|
119
107
|
id: string;
|
|
120
108
|
/**
|
|
121
109
|
* Group title. Optional: a form that is one unbroken block of fields has no
|
|
122
|
-
* heading to give, and the label column already renders empty
|
|
123
|
-
* absent — the type was simply stricter than the component.
|
|
110
|
+
* heading to give, and the label column already renders empty without it.
|
|
124
111
|
*/
|
|
125
112
|
title?: string;
|
|
126
113
|
/** Group description */
|
|
@@ -148,6 +135,15 @@ export interface FormButtonProps {
|
|
|
148
135
|
/** Additional CSS classes */
|
|
149
136
|
className?: string;
|
|
150
137
|
}
|
|
138
|
+
/**
|
|
139
|
+
* The sliver of an app SDK that `Form` needs: one call to the server. Nothing here knows
|
|
140
|
+
* about the rest of the SDK, which is the point.
|
|
141
|
+
*/
|
|
142
|
+
export interface FormInvoker {
|
|
143
|
+
http: {
|
|
144
|
+
invoke<T = any>(options: InvokeOptions): Promise<T>;
|
|
145
|
+
};
|
|
146
|
+
}
|
|
151
147
|
export interface FormProps<T = Record<string, any>> {
|
|
152
148
|
/** Form groups */
|
|
153
149
|
groups: FormGroup<T>[];
|
|
@@ -183,8 +179,14 @@ export interface FormProps<T = Record<string, any>> {
|
|
|
183
179
|
* cast at the call site.
|
|
184
180
|
*/
|
|
185
181
|
ref?: React.RefObject<HTMLFormElement | null>;
|
|
186
|
-
/**
|
|
187
|
-
|
|
182
|
+
/**
|
|
183
|
+
* A handle that can call the server, for the storage fields (`storage`, `folder`).
|
|
184
|
+
* Typed as the one method used rather than the whole `InternalSDK`: that type lives
|
|
185
|
+
* in `@opencxh/app-sdk`, which ui-kit does not (and should not) depend on to render
|
|
186
|
+
* a form. It also keeps the storage fields' slated move to a federated resource
|
|
187
|
+
* from being blocked by a type import.
|
|
188
|
+
*/
|
|
189
|
+
sdk?: FormInvoker;
|
|
188
190
|
}
|
|
189
191
|
/**
|
|
190
192
|
* Generic Form component with groups, validation, and conditional rendering
|
package/dist/src/index.d.ts
CHANGED
|
@@ -1,72 +1,72 @@
|
|
|
1
|
-
export { cn, createSizes, createVariants } from './utils/cn';
|
|
2
|
-
export { useAnchoredPosition, type AnchoredPositionOptions } from './utils/useAnchoredPosition';
|
|
3
|
-
export { IDENTITY_TONE_COUNT, identityDotClass, identityPlateClass, identityTone, type IdentityTone } from './utils/identity';
|
|
4
|
-
export { catTone, type CatTone } from './utils/catTone';
|
|
5
|
-
export { normalizeText, text } from './utils/text';
|
|
6
|
-
export { MeetingGrid, type MeetingGridProps } from './meeting/MeetingGrid';
|
|
7
|
-
export { ParticipantTile, type ParticipantTileProps } from './meeting/ParticipantTile';
|
|
8
|
-
export { VideoSurface, type VideoSurfaceProps } from './meeting/VideoSurface';
|
|
9
1
|
export { Button, type ButtonProps } from './action/Button';
|
|
10
2
|
export { ButtonGroup, type ButtonGroupProps } from './action/ButtonGroup';
|
|
11
3
|
export { FilterChip, type FilterChipProps } from './action/FilterChip';
|
|
12
4
|
export { Link, type LinkProps } from './action/Link';
|
|
13
|
-
export {
|
|
5
|
+
export { type SegmentedOption, SegmentedToggle, type SegmentedToggleProps, } from './action/SegmentedToggle';
|
|
14
6
|
export { SplitButton, type SplitButtonOption, type SplitButtonProps } from './action/SplitButton';
|
|
15
|
-
export
|
|
16
|
-
export { ImageField, type ImageFieldProps } from './input/ImageField';
|
|
17
|
-
export { DatePicker, type DatePickerProps } from './input/DatePicker';
|
|
18
|
-
export { FolderSelect, type FolderDestination, type FolderSelectProps } from './input/FolderSelect';
|
|
19
|
-
export { SearchableTextField, type SearchableTextFieldProps } from './input/SearchableTextField';
|
|
20
|
-
export { SearchField, type SearchFieldProps } from './input/SearchField';
|
|
21
|
-
export { Select, type SelectOption, type SelectProps } from './input/Select';
|
|
22
|
-
export { Switch, type SwitchProps } from './input/Switch';
|
|
23
|
-
export { StorageInput, type StorageInputProps } from './input/StorageInput';
|
|
24
|
-
export { TextArea, type TextAreaProps } from './input/TextArea';
|
|
25
|
-
export { TextField, type TextFieldProps } from './input/TextField';
|
|
26
|
-
export { Form, FormSection, type FormButtonProps, type FormFieldType, type FormGroup, type FormGroupItem, type FormProps } from './forms/Form';
|
|
27
|
-
export { autofillProps, type AutofillProps } from './forms/autofill';
|
|
28
|
-
export { Dropdown, type DropdownOption, type DropdownProps } from './overlays/Dropdown';
|
|
29
|
-
export { ConfirmDialog, type ConfirmDialogProps } from './overlays/ConfirmDialog';
|
|
30
|
-
export { Modal, type ModalProps } from './overlays/Modal';
|
|
31
|
-
export { Popover, type PopoverProps } from './overlays/Popover';
|
|
32
|
-
export { Badge, type BadgeProps } from './feedback/Badge';
|
|
33
|
-
export { ContentLoading, type ContentLoadingProps, type ContentLoadingShape } from './feedback/ContentLoading';
|
|
34
|
-
export { EmptyState, type EmptyStateProps } from './feedback/EmptyState';
|
|
35
|
-
export { Kbd, type KbdProps } from './feedback/Kbd';
|
|
36
|
-
export { ProgressBar, type ProgressBarProps } from './feedback/ProgressBar';
|
|
37
|
-
export { Spinner, type SpinnerProps } from './feedback/Spinner';
|
|
38
|
-
export { StatusDot, type StatusDotProps } from './feedback/StatusDot';
|
|
39
|
-
export { StepIndicator, type StepIndicatorProps } from './feedback/StepIndicator';
|
|
7
|
+
export * from './command-palette';
|
|
40
8
|
export { ArtifactView, type ArtifactViewProps } from './content/ArtifactView';
|
|
41
9
|
export { AssistantCard, type AssistantCardProps } from './content/AssistantCard';
|
|
42
10
|
export { Avatar, type AvatarProps, type AvatarTone } from './content/Avatar';
|
|
43
11
|
export { AvatarStack, type AvatarStackPerson, type AvatarStackProps } from './content/AvatarStack';
|
|
44
12
|
export { ChannelBadge, type ChannelBadgeProps, type ChannelKey } from './content/ChannelBadge';
|
|
45
|
-
export { Icon,
|
|
13
|
+
export { Icon, type IconProps, resolveLucideIcon } from './content/Icon';
|
|
46
14
|
export { Image, type ImageProps } from './content/Image';
|
|
15
|
+
export { KpiCard, type KpiCardProps } from './content/KpiCard';
|
|
47
16
|
export { List, ListBulkAction, type ListGroup, type ListProps } from './content/List';
|
|
48
17
|
export { MessageBubble, type MessageBubbleProps } from './content/MessageBubble';
|
|
49
|
-
export { KpiCard, type KpiCardProps } from './content/KpiCard';
|
|
50
18
|
export { MetaSeparator, MetaValue, type MetaValueProps } from './content/MetaValue';
|
|
51
19
|
export { Page, type PageProps } from './content/Page';
|
|
52
|
-
export { PageHeader, type PageHeaderAction, type PageHeaderProps } from './content/PageHeader';
|
|
53
|
-
export { PageToolbar, PageToolbarActions, type PageToolbarActionsProps, type PageToolbarProps } from './content/PageToolbar';
|
|
20
|
+
export { PageHeader, type PageHeaderAction, type PageHeaderProps, } from './content/PageHeader';
|
|
21
|
+
export { PageToolbar, PageToolbarActions, type PageToolbarActionsProps, type PageToolbarProps, } from './content/PageToolbar';
|
|
54
22
|
export { RichText, type RichTextProps } from './content/RichText';
|
|
55
23
|
export { SectionCaption, type SectionCaptionProps } from './content/SectionCaption';
|
|
56
24
|
export { SectionDivider, type SectionDividerProps } from './content/SectionDivider';
|
|
57
|
-
export {
|
|
58
|
-
export { SettingsRow,
|
|
25
|
+
export { type SettingsFrameApi, SettingsFrameProvider, SettingsPage, type SettingsPageProps, type SettingsTrailEntry, useSettingsFrame, useSettingsFrameHost, } from './content/SettingsPage';
|
|
26
|
+
export { SettingsRow, type SettingsRowProps, SettingsSection, type SettingsSectionProps, } from './content/SettingsRow';
|
|
59
27
|
export { SourceChip, type SourceChipProps } from './content/SourceChip';
|
|
60
|
-
export {
|
|
61
|
-
export {
|
|
28
|
+
export { dateFilterHandler, multiSelectFilterHandler, selectFilterHandler, Table, type TableAction, type TableColumn, type TableFilter, type TableProps, } from './content/Table';
|
|
29
|
+
export { type BadgeColumnConfig, type BooleanBadgeColumnConfig, badgeColumn, booleanBadgeColumn, type LabelsColumnConfig, labelsColumn, } from './content/tableColumns';
|
|
62
30
|
export { View, type ViewGroup, type ViewProps } from './content/View';
|
|
63
|
-
export {
|
|
64
|
-
export {
|
|
65
|
-
export {
|
|
66
|
-
export {
|
|
67
|
-
export
|
|
31
|
+
export { ErrorBoundary } from './error-boundary/index';
|
|
32
|
+
export { FederatedResource } from './federated-resource/index';
|
|
33
|
+
export { Badge, type BadgeProps } from './feedback/Badge';
|
|
34
|
+
export { ContentLoading, type ContentLoadingProps, type ContentLoadingShape, } from './feedback/ContentLoading';
|
|
35
|
+
export { EmptyState, type EmptyStateProps } from './feedback/EmptyState';
|
|
36
|
+
export { Kbd, type KbdProps } from './feedback/Kbd';
|
|
37
|
+
export { ProgressBar, type ProgressBarProps } from './feedback/ProgressBar';
|
|
38
|
+
export { Spinner, type SpinnerProps } from './feedback/Spinner';
|
|
39
|
+
export { StatusDot, type StatusDotProps } from './feedback/StatusDot';
|
|
40
|
+
export { StepIndicator, type StepIndicatorProps } from './feedback/StepIndicator';
|
|
41
|
+
export { type AutofillProps, autofillProps } from './forms/autofill';
|
|
42
|
+
export { Form, type FormButtonProps, type FormFieldType, type FormGroup, type FormGroupItem, type FormInvoker, type FormProps, FormSection, } from './forms/Form';
|
|
43
|
+
export { Checkbox, type CheckboxProps } from './input/Checkbox';
|
|
44
|
+
export { DatePicker, type DatePickerProps } from './input/DatePicker';
|
|
45
|
+
export { type FolderDestination, FolderSelect, type FolderSelectProps } from './input/FolderSelect';
|
|
46
|
+
export { ImageField, type ImageFieldProps } from './input/ImageField';
|
|
47
|
+
export { SearchableTextField, type SearchableTextFieldProps } from './input/SearchableTextField';
|
|
48
|
+
export { SearchField, type SearchFieldProps } from './input/SearchField';
|
|
49
|
+
export { Select, type SelectOption, type SelectProps } from './input/Select';
|
|
50
|
+
export { StorageInput, type StorageInputProps } from './input/StorageInput';
|
|
51
|
+
export { Switch, type SwitchProps } from './input/Switch';
|
|
52
|
+
export { TextArea, type TextAreaProps } from './input/TextArea';
|
|
53
|
+
export { TextField, type TextFieldProps } from './input/TextField';
|
|
54
|
+
export { MeetingGrid, type MeetingGridProps } from './meeting/MeetingGrid';
|
|
55
|
+
export { ParticipantTile, type ParticipantTileProps } from './meeting/ParticipantTile';
|
|
56
|
+
export { VideoSurface, type VideoSurfaceProps } from './meeting/VideoSurface';
|
|
57
|
+
export { type MenuItem, type MenuItemAction, SidebarMenu } from './navigation/Sidebar';
|
|
58
|
+
export { TabBar, type TabItem, Tabs, type TabsProps } from './navigation/Tabs';
|
|
59
|
+
export { ConfirmDialog, type ConfirmDialogProps } from './overlays/ConfirmDialog';
|
|
60
|
+
export { Dropdown, type DropdownOption, type DropdownProps, } from './overlays/Dropdown';
|
|
61
|
+
export { Modal, type ModalProps } from './overlays/Modal';
|
|
62
|
+
export { Popover, type PopoverProps } from './overlays/Popover';
|
|
68
63
|
export * from './primitives/Box';
|
|
69
64
|
export * from './primitives/Card';
|
|
65
|
+
export { Heading, type HeadingProps } from './typography/Heading';
|
|
70
66
|
export * from './typography/Text';
|
|
71
|
-
export {
|
|
72
|
-
export {
|
|
67
|
+
export { Text, type TextProps } from './typography/Text';
|
|
68
|
+
export { type CatTone, catTone } from './utils/catTone';
|
|
69
|
+
export { cn, createSizes, createVariants } from './utils/cn';
|
|
70
|
+
export { IDENTITY_TONE_COUNT, type IdentityTone, identityDotClass, identityPlateClass, identityTone, } from './utils/identity';
|
|
71
|
+
export { normalizeText, text } from './utils/text';
|
|
72
|
+
export { type AnchoredPositionOptions, useAnchoredPosition, } from './utils/useAnchoredPosition';
|
|
@@ -1,44 +1,17 @@
|
|
|
1
1
|
import { default as React } from 'react';
|
|
2
|
-
export interface CheckboxProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>,
|
|
3
|
-
/**
|
|
4
|
-
* The label for the checkbox
|
|
5
|
-
*/
|
|
2
|
+
export interface CheckboxProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, "size"> {
|
|
6
3
|
label?: string;
|
|
7
|
-
/**
|
|
8
|
-
* Helper text to display below the checkbox
|
|
9
|
-
*/
|
|
10
4
|
helperText?: string;
|
|
11
|
-
/**
|
|
12
|
-
* Error message to display when the checkbox is invalid
|
|
13
|
-
*/
|
|
14
5
|
error?: string;
|
|
15
|
-
|
|
16
|
-
* The size of the checkbox
|
|
17
|
-
*/
|
|
18
|
-
size?: 'sm' | 'md' | 'lg' | 'full';
|
|
19
|
-
/**
|
|
20
|
-
* Whether the checkbox is in an indeterminate state
|
|
21
|
-
*/
|
|
6
|
+
size?: "sm" | "md" | "lg" | "full";
|
|
22
7
|
indeterminate?: boolean;
|
|
23
|
-
/**
|
|
24
|
-
* Additional class name for the container
|
|
25
|
-
*/
|
|
8
|
+
/** Additional class name for the container */
|
|
26
9
|
containerClassName?: string;
|
|
27
|
-
/**
|
|
28
|
-
* Additional class name for the label
|
|
29
|
-
*/
|
|
10
|
+
/** Additional class name for the label */
|
|
30
11
|
labelClassName?: string;
|
|
31
12
|
}
|
|
32
13
|
/**
|
|
33
|
-
*
|
|
34
|
-
*
|
|
35
|
-
* Uses the native input with `accent-color`, so the checked fill is the accent
|
|
14
|
+
* Native checkbox styled via `accent-color`: the checked fill is the accent
|
|
36
15
|
* token and dark mode needs no extra classes.
|
|
37
|
-
*
|
|
38
|
-
* @example
|
|
39
|
-
* ```tsx
|
|
40
|
-
* <Checkbox label="Voorwaarden accepteren" />
|
|
41
|
-
* <Checkbox label="Alles selecteren" indeterminate />
|
|
42
|
-
* ```
|
|
43
16
|
*/
|
|
44
17
|
export declare const Checkbox: React.ForwardRefExoticComponent<CheckboxProps & React.RefAttributes<HTMLInputElement>>;
|
|
@@ -1,24 +1,14 @@
|
|
|
1
1
|
export interface DatePickerProps {
|
|
2
|
-
/** Current date value */
|
|
3
2
|
value?: Date | null;
|
|
4
|
-
/** Change handler */
|
|
5
3
|
onChange?: (date: Date | null) => void;
|
|
6
|
-
/** Placeholder text */
|
|
7
4
|
placeholder?: string;
|
|
8
|
-
/** Whether the input is disabled */
|
|
9
5
|
disabled?: boolean;
|
|
10
|
-
/** Whether the input is required */
|
|
11
6
|
required?: boolean;
|
|
12
|
-
|
|
13
|
-
size?: 'sm' | 'md' | 'lg' | 'full';
|
|
14
|
-
/** Additional CSS classes */
|
|
7
|
+
size?: "sm" | "md" | "lg" | "full";
|
|
15
8
|
className?: string;
|
|
16
|
-
/** Minimum selectable date */
|
|
17
9
|
minDate?: Date;
|
|
18
|
-
/** Maximum selectable date */
|
|
19
10
|
maxDate?: Date;
|
|
20
|
-
|
|
21
|
-
format?: 'MM/dd/yyyy' | 'dd/MM/yyyy' | 'yyyy-MM-dd';
|
|
11
|
+
format?: "MM/dd/yyyy" | "dd/MM/yyyy" | "yyyy-MM-dd";
|
|
22
12
|
/**
|
|
23
13
|
* Also pick a time. The display gains `HH:mm`, the panel gains a time field,
|
|
24
14
|
* and choosing a day keeps the time already on the value instead of resetting
|
|
@@ -26,7 +16,4 @@ export interface DatePickerProps {
|
|
|
26
16
|
*/
|
|
27
17
|
withTime?: boolean;
|
|
28
18
|
}
|
|
29
|
-
/**
|
|
30
|
-
* DatePicker component with calendar popup
|
|
31
|
-
*/
|
|
32
19
|
export declare const DatePicker: import('react').ForwardRefExoticComponent<DatePickerProps & import('react').RefAttributes<HTMLInputElement>>;
|
|
@@ -24,10 +24,5 @@ export interface SearchFieldProps extends Omit<React.InputHTMLAttributes<HTMLInp
|
|
|
24
24
|
*
|
|
25
25
|
* Three places had grown their own copy of it (the nav search, the settings
|
|
26
26
|
* search, the table toolbar); they share this one now.
|
|
27
|
-
*
|
|
28
|
-
* @example
|
|
29
|
-
* ```tsx
|
|
30
|
-
* <SearchField value={query} onValueChange={setQuery} placeholder="Zoeken" hint="⌘K" />
|
|
31
|
-
* ```
|
|
32
27
|
*/
|
|
33
28
|
export declare const SearchField: React.ForwardRefExoticComponent<SearchFieldProps & React.RefAttributes<HTMLInputElement>>;
|
|
@@ -18,10 +18,9 @@ export interface SearchableTextFieldProps extends Omit<React.InputHTMLAttributes
|
|
|
18
18
|
onSelect?: (value: string) => void;
|
|
19
19
|
debounceTime?: number;
|
|
20
20
|
/**
|
|
21
|
-
* Selector
|
|
22
|
-
*
|
|
23
|
-
*
|
|
24
|
-
* een vrije zoekopdracht (bv. een afzender-selector).
|
|
21
|
+
* Selector mode: on open (focus/chevron) show all options, even when the current
|
|
22
|
+
* value is an already-selected option; filter only once the user actually types.
|
|
23
|
+
* For fields that are more picker than free search (e.g. a sender selector).
|
|
25
24
|
*/
|
|
26
25
|
showAllOnOpen?: boolean;
|
|
27
26
|
}
|
|
@@ -24,9 +24,9 @@ export interface SelectProps extends Omit<React.HTMLAttributes<HTMLDivElement>,
|
|
|
24
24
|
labelClassName?: string;
|
|
25
25
|
searchable?: boolean;
|
|
26
26
|
multiple?: boolean;
|
|
27
|
-
/**
|
|
27
|
+
/** Allow free-text entry (Enter, or clicking the create row). */
|
|
28
28
|
allowCreate?: boolean;
|
|
29
|
-
/**
|
|
29
|
+
/** Optionally shape the option created from free-text input. */
|
|
30
30
|
onCreateOption?: (label: string) => SelectOption;
|
|
31
31
|
}
|
|
32
32
|
export declare const Select: React.ForwardRefExoticComponent<SelectProps & React.RefAttributes<HTMLDivElement>>;
|
|
@@ -29,7 +29,7 @@ export interface StorageInputProps {
|
|
|
29
29
|
data: FilePointer;
|
|
30
30
|
}> | undefined;
|
|
31
31
|
onDownloadFile?: (fileId: string) => Promise<Uint8Array> | undefined;
|
|
32
|
-
onRegisterFile?: (payload: Omit<FilePointer,
|
|
32
|
+
onRegisterFile?: (payload: Omit<FilePointer, "id">) => Promise<{
|
|
33
33
|
data: FilePointer;
|
|
34
34
|
}> | undefined;
|
|
35
35
|
}
|
|
@@ -1,39 +1,14 @@
|
|
|
1
1
|
import { default as React } from 'react';
|
|
2
|
-
export interface TextAreaProps extends Omit<React.TextareaHTMLAttributes<HTMLTextAreaElement>,
|
|
3
|
-
/**
|
|
4
|
-
* The label for the textarea field
|
|
5
|
-
*/
|
|
2
|
+
export interface TextAreaProps extends Omit<React.TextareaHTMLAttributes<HTMLTextAreaElement>, "size"> {
|
|
6
3
|
label?: string;
|
|
7
|
-
/**
|
|
8
|
-
* Helper text to display below the textarea
|
|
9
|
-
*/
|
|
10
4
|
helperText?: string;
|
|
11
|
-
/**
|
|
12
|
-
* Error message to display when the textarea is invalid
|
|
13
|
-
*/
|
|
14
5
|
error?: string;
|
|
15
|
-
|
|
16
|
-
* The size of the textarea field
|
|
17
|
-
*/
|
|
18
|
-
size?: 'sm' | 'md' | 'lg' | 'full';
|
|
19
|
-
/**
|
|
20
|
-
* Whether the textarea should take the full width of its container
|
|
21
|
-
*/
|
|
6
|
+
size?: "sm" | "md" | "lg" | "full";
|
|
22
7
|
fullWidth?: boolean;
|
|
23
|
-
/**
|
|
24
|
-
* Whether the textarea is in a loading state
|
|
25
|
-
*/
|
|
26
8
|
loading?: boolean;
|
|
27
|
-
/**
|
|
28
|
-
* Additional class name for the container
|
|
29
|
-
*/
|
|
9
|
+
/** Additional class name for the container */
|
|
30
10
|
containerClassName?: string;
|
|
31
|
-
/**
|
|
32
|
-
* Additional class name for the label
|
|
33
|
-
*/
|
|
11
|
+
/** Additional class name for the label */
|
|
34
12
|
labelClassName?: string;
|
|
35
13
|
}
|
|
36
|
-
/**
|
|
37
|
-
* TextArea component with theme integration and validation states
|
|
38
|
-
*/
|
|
39
14
|
export declare const TextArea: React.ForwardRefExoticComponent<TextAreaProps & React.RefAttributes<HTMLTextAreaElement>>;
|
|
@@ -1,44 +1,16 @@
|
|
|
1
1
|
import { default as React } from 'react';
|
|
2
|
-
export interface TextFieldProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>,
|
|
3
|
-
/**
|
|
4
|
-
* The label for the input field
|
|
5
|
-
*/
|
|
2
|
+
export interface TextFieldProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, "size"> {
|
|
6
3
|
label?: string;
|
|
7
|
-
/**
|
|
8
|
-
* Helper text to display below the input
|
|
9
|
-
*/
|
|
10
4
|
helperText?: string;
|
|
11
|
-
/**
|
|
12
|
-
* Error message to display when the input is invalid
|
|
13
|
-
*/
|
|
14
5
|
error?: string;
|
|
15
|
-
|
|
16
|
-
* The size of the input field
|
|
17
|
-
*/
|
|
18
|
-
size?: 'sm' | 'md' | 'lg' | 'full';
|
|
19
|
-
/**
|
|
20
|
-
* Whether the input should take the full width of its container
|
|
21
|
-
*/
|
|
6
|
+
size?: "sm" | "md" | "lg" | "full";
|
|
22
7
|
fullWidth?: boolean;
|
|
23
|
-
/**
|
|
24
|
-
* Icon to display at the start of the input
|
|
25
|
-
*/
|
|
26
8
|
startIcon?: React.ReactNode;
|
|
27
|
-
/**
|
|
28
|
-
* Icon to display at the end of the input
|
|
29
|
-
*/
|
|
30
9
|
endIcon?: React.ReactNode;
|
|
31
|
-
/**
|
|
32
|
-
* Whether the input is in a loading state
|
|
33
|
-
*/
|
|
34
10
|
loading?: boolean;
|
|
35
|
-
/**
|
|
36
|
-
* Additional class name for the container
|
|
37
|
-
*/
|
|
11
|
+
/** Additional class name for the container */
|
|
38
12
|
containerClassName?: string;
|
|
39
|
-
/**
|
|
40
|
-
* Additional class name for the label
|
|
41
|
-
*/
|
|
13
|
+
/** Additional class name for the label */
|
|
42
14
|
labelClassName?: string;
|
|
43
15
|
}
|
|
44
16
|
/**
|
|
@@ -58,14 +30,5 @@ export declare const fieldLabelClasses = "mb-1.5 block text-sm font-medium";
|
|
|
58
30
|
export declare const fieldFrameClasses: string;
|
|
59
31
|
/** Resting / error edge, shared so every control agrees on what "invalid" looks like. */
|
|
60
32
|
export declare const fieldEdgeClasses: (hasError: boolean) => "border-border-strong" | "border-danger-border bg-danger-soft";
|
|
61
|
-
/**
|
|
62
|
-
* TextField component with theme integration and validation states
|
|
63
|
-
*
|
|
64
|
-
* @example
|
|
65
|
-
* ```tsx
|
|
66
|
-
* <TextField label="E-mail" type="email" placeholder="naam@bedrijf.nl" />
|
|
67
|
-
* <TextField label="Zoeken" startIcon={<Icon icon={Search} />} />
|
|
68
|
-
* <TextField label="Wachtwoord" type="password" error="Verplicht veld" />
|
|
69
|
-
* ```
|
|
70
|
-
*/
|
|
33
|
+
/** Themed text input; shares its frame and label classes with TextArea, Select and DatePicker. */
|
|
71
34
|
export declare const TextField: React.ForwardRefExoticComponent<TextFieldProps & React.RefAttributes<HTMLInputElement>>;
|
|
@@ -2,38 +2,39 @@ import { ReactNode } from 'react';
|
|
|
2
2
|
export interface MeetingGridProps {
|
|
3
3
|
tiles: ReactNode[];
|
|
4
4
|
/**
|
|
5
|
-
*
|
|
6
|
-
* 1-
|
|
5
|
+
* The tile that gets the main area — the dominant speaker, or the other
|
|
6
|
+
* party in a 1-on-1. The rest renders as a strip underneath.
|
|
7
7
|
*/
|
|
8
8
|
pinned?: ReactNode;
|
|
9
9
|
/**
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
10
|
+
* Max strip tiles side by side; the overflow collapses into one `+N` tile.
|
|
11
|
+
* Without it a twelve-person meeting squeezes into a 448px dock as twelve
|
|
12
|
+
* unreadable slivers.
|
|
13
13
|
*/
|
|
14
14
|
maxStrip?: number;
|
|
15
15
|
className?: string;
|
|
16
16
|
}
|
|
17
17
|
export declare function columnsFor(count: number): string;
|
|
18
18
|
/**
|
|
19
|
-
*
|
|
20
|
-
* dominant area and remaining tiles render in a strip underneath. Otherwise tiles
|
|
21
|
-
* flow in an auto-sized grid.
|
|
22
|
-
*
|
|
23
|
-
* **Het vlak bepaalt de tegels, niet andersom.** Elke cel is `min-w-0 min-h-0` en de rijen
|
|
24
|
-
* delen de hoogte (`auto-rows-fr`), zodat het raster past in de doos die het krijgt. Geef de
|
|
25
|
-
* tegels daarom `fill` mee: een tegel die zijn hoogte uit zijn eigen breedte haalt
|
|
26
|
-
* (`aspect-video`, de standaard) duwt het raster buiten zijn oevers zodra het vlak lager is
|
|
27
|
-
* dan die verhouding — precies wat er in de dock gebeurde.
|
|
28
|
-
*/
|
|
29
|
-
/**
|
|
30
|
-
* Hoeveel striptegels er getoond worden, en hoeveel er als `+N` overblijven.
|
|
19
|
+
* How many strip tiles to show, and how many collapse into `+N`.
|
|
31
20
|
*
|
|
32
|
-
*
|
|
33
|
-
*
|
|
21
|
+
* The counter takes a slot itself — otherwise it replaces one tile with the
|
|
22
|
+
* message that one tile is missing, which is no gain. With exactly enough
|
|
23
|
+
* room it stays away.
|
|
34
24
|
*/
|
|
35
25
|
export declare function splitStrip(count: number, maxStrip?: number): {
|
|
36
26
|
shown: number;
|
|
37
27
|
hidden: number;
|
|
38
28
|
};
|
|
29
|
+
/**
|
|
30
|
+
* Layout primitive for meeting views. When `pinned` is provided it gets the
|
|
31
|
+
* dominant area and remaining tiles render in a strip underneath; otherwise
|
|
32
|
+
* tiles flow in an auto-sized grid.
|
|
33
|
+
*
|
|
34
|
+
* The pane sizes the tiles, not the other way around: every cell is
|
|
35
|
+
* `min-w-0 min-h-0` and rows share the height (`auto-rows-fr`) so the grid
|
|
36
|
+
* fits the box it gets. Give tiles `fill`: a tile that takes its height from
|
|
37
|
+
* its own width (`aspect-video`, the default) pushes the grid out of bounds
|
|
38
|
+
* once the pane is shorter than that ratio.
|
|
39
|
+
*/
|
|
39
40
|
export declare function MeetingGrid({ tiles, pinned, maxStrip, className }: MeetingGridProps): import("react").JSX.Element;
|
|
@@ -20,14 +20,10 @@ export interface ParticipantTileProps {
|
|
|
20
20
|
* available; otherwise renders the `videoSlot` passed by the caller (typically
|
|
21
21
|
* a <VideoSurface /> wired to a provider-specific stream renderer).
|
|
22
22
|
*
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
*
|
|
26
|
-
*
|
|
27
|
-
*
|
|
28
|
-
* het scherm, terwijl de tegel 120px breed kan zijn op een 4K-monitor.
|
|
29
|
-
*
|
|
30
|
-
* Vaste maten stonden hier eerder wél: een avatar van 64px en een naamlabel met `max-w-35`.
|
|
31
|
-
* In een striptegel van 90px was de avatar breder dan de tegel en dekte het label hem af.
|
|
23
|
+
* Everything inside scales with the tile, not the window: the tile is its own
|
|
24
|
+
* `@container`, so the avatar is a share of the tile's width and the name only
|
|
25
|
+
* appears when there is room. Tailwind's viewport breakpoints (`md:`) look at
|
|
26
|
+
* the screen, while the tile can be 120px wide on a 4K monitor — fixed sizes
|
|
27
|
+
* (a 64px avatar, a `max-w-35` label) overflowed a 90px strip tile.
|
|
32
28
|
*/
|
|
33
29
|
export declare function ParticipantTile({ name, avatarUrl, muted, speaking, hasVideo, videoSlot, className, fill, }: ParticipantTileProps): import("react").JSX.Element;
|
|
@@ -13,4 +13,4 @@ export interface VideoSurfaceProps {
|
|
|
13
13
|
* Provider-agnostic video tile surface. Owns the DOM slot; the caller wires
|
|
14
14
|
* their SDK's renderer to it via `attach`.
|
|
15
15
|
*/
|
|
16
|
-
export declare function VideoSurface({ attach, active, mirrored, className }: VideoSurfaceProps): import("react").JSX.Element;
|
|
16
|
+
export declare function VideoSurface({ attach, active, mirrored, className, }: VideoSurfaceProps): import("react").JSX.Element;
|