@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.
Files changed (53) hide show
  1. package/dist/index.cjs +2 -2
  2. package/dist/index.cjs.map +1 -1
  3. package/dist/index.js +5040 -5072
  4. package/dist/index.js.map +1 -1
  5. package/dist/src/action/Button.d.ts +3 -3
  6. package/dist/src/action/ButtonGroup.d.ts +2 -2
  7. package/dist/src/action/Link.d.ts +3 -3
  8. package/dist/src/action/SplitButton.d.ts +10 -10
  9. package/dist/src/content/ArtifactView.d.ts +1 -1
  10. package/dist/src/content/Avatar.d.ts +7 -15
  11. package/dist/src/content/ChannelBadge.d.ts +1 -1
  12. package/dist/src/content/Icon.d.ts +3 -3
  13. package/dist/src/content/Image.d.ts +3 -3
  14. package/dist/src/content/MessageBubble.d.ts +4 -13
  15. package/dist/src/content/Page.d.ts +8 -28
  16. package/dist/src/content/PageHeader.d.ts +0 -19
  17. package/dist/src/content/PageToolbar.d.ts +0 -2
  18. package/dist/src/content/RichText.d.ts +5 -8
  19. package/dist/src/content/SectionDivider.d.ts +1 -1
  20. package/dist/src/content/SettingsPage.d.ts +6 -10
  21. package/dist/src/content/tableColumns.d.ts +6 -8
  22. package/dist/src/federated-resource/index.d.ts +5 -7
  23. package/dist/src/feedback/Badge.d.ts +4 -41
  24. package/dist/src/feedback/EmptyState.d.ts +1 -11
  25. package/dist/src/feedback/Kbd.d.ts +1 -8
  26. package/dist/src/feedback/ProgressBar.d.ts +0 -6
  27. package/dist/src/feedback/Spinner.d.ts +4 -26
  28. package/dist/src/feedback/StatusDot.d.ts +1 -12
  29. package/dist/src/feedback/StepIndicator.d.ts +1 -9
  30. package/dist/src/forms/Form.d.ts +39 -37
  31. package/dist/src/index.d.ts +49 -49
  32. package/dist/src/input/Checkbox.d.ts +5 -32
  33. package/dist/src/input/DatePicker.d.ts +2 -15
  34. package/dist/src/input/SearchField.d.ts +0 -5
  35. package/dist/src/input/SearchableTextField.d.ts +3 -4
  36. package/dist/src/input/Select.d.ts +2 -2
  37. package/dist/src/input/StorageInput.d.ts +1 -1
  38. package/dist/src/input/TextArea.d.ts +4 -29
  39. package/dist/src/input/TextField.d.ts +5 -42
  40. package/dist/src/meeting/MeetingGrid.d.ts +20 -19
  41. package/dist/src/meeting/ParticipantTile.d.ts +5 -9
  42. package/dist/src/meeting/VideoSurface.d.ts +1 -1
  43. package/dist/src/navigation/Sidebar.d.ts +15 -19
  44. package/dist/src/navigation/Tabs.d.ts +2 -2
  45. package/dist/src/overlays/ConfirmDialog.d.ts +0 -13
  46. package/dist/src/overlays/Dropdown.d.ts +1 -19
  47. package/dist/src/overlays/Modal.d.ts +4 -68
  48. package/dist/src/overlays/Popover.d.ts +0 -2
  49. package/dist/src/primitives/Box.d.ts +7 -7
  50. package/dist/src/test/setup.d.ts +0 -0
  51. package/dist/src/typography/Heading.d.ts +4 -4
  52. package/dist/src/typography/Text.d.ts +7 -7
  53. package/package.json +8 -8
@@ -1,43 +1,32 @@
1
- import { InternalSDK } from '@opencxh/domain';
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>`, which makes every property `X | undefined`, and
7
- * `Address | undefined extends object` is false -- so without it every nested
8
- * path silently disappears and only top-level keys survive.
9
- *
10
- * Arrays, Dates and functions are treated as leaves. Recursing into them would
11
- * spell out every index and prototype method, and the resulting union is exactly
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
- * The second half matters for `type: "custom"` fields, which own a whole
26
- * sub-object -- a discriminated union, a repeatable list -- and would otherwise
27
- * be unspellable, since `NestedKeys` only reaches leaves. It is added as a
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
- * Exported because a page often has a section that is not a `Form` field at all
38
- * a checklist, a list of linked records — and it has to line up with the bands
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, which is right for a note and
64
- * far too small for a field that holds an instruction someone actually reads
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
- * Uitleg onder het veld: waarom bestaat dit veld, of wat is de consequentie van de
90
- * keuze. Voor velden waar het label de vraag niet volledig kan stellen — een
91
- * groep-`description` is te grof zodra een groep meerdere velden heeft.
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 when it is
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
- /** SDK instance */
187
- sdk?: InternalSDK<any>;
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
@@ -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 { SegmentedToggle, type SegmentedOption, type SegmentedToggleProps } from './action/SegmentedToggle';
5
+ export { type SegmentedOption, SegmentedToggle, type SegmentedToggleProps, } from './action/SegmentedToggle';
14
6
  export { SplitButton, type SplitButtonOption, type SplitButtonProps } from './action/SplitButton';
15
- export { Checkbox, type CheckboxProps } from './input/Checkbox';
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, resolveLucideIcon, type IconProps } from './content/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 { SettingsFrameProvider, SettingsPage, useSettingsFrame, useSettingsFrameHost, type SettingsFrameApi, type SettingsPageProps, type SettingsTrailEntry } from './content/SettingsPage';
58
- export { SettingsRow, SettingsSection, type SettingsRowProps, type SettingsSectionProps } from './content/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 { Table, dateFilterHandler, multiSelectFilterHandler, selectFilterHandler, type TableAction, type TableColumn, type TableFilter, type TableProps } from './content/Table';
61
- export { badgeColumn, booleanBadgeColumn, labelsColumn, type BadgeColumnConfig, type BooleanBadgeColumnConfig, type LabelsColumnConfig } from './content/tableColumns';
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 { SidebarMenu, type MenuItem, type MenuItemAction } from './navigation/Sidebar';
64
- export { TabBar, Tabs, type TabItem, type TabsProps } from './navigation/Tabs';
65
- export { Heading, type HeadingProps } from './typography/Heading';
66
- export { Text, type TextProps } from './typography/Text';
67
- export * from './command-palette';
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 { FederatedResource } from './federated-resource/index';
72
- export { ErrorBoundary } from './error-boundary/index';
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>, 'size'> {
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
- * Checkbox component with theme integration.
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
- /** Input size */
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
- /** Date format for display */
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-modus: toon bij openen (focus/chevron) álle opties, ook wanneer de
22
- * huidige waarde een reeds geselecteerde optie is. Pas zodra de gebruiker zelf
23
- * typt wordt er gefilterd. Handig wanneer het veld eerder een keuzelijst is dan
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
- /** Vrije invoer toestaan (Enter of klik op “Voeg toe…”) */
27
+ /** Allow free-text entry (Enter, or clicking the create row). */
28
28
  allowCreate?: boolean;
29
- /** Optioneel: zelf bepalen hoe een nieuwe optie eruit ziet */
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, 'id'>) => Promise<{
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>, 'size'> {
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>, 'size'> {
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
- * De tegel die het vlak krijgtde dominante spreker, of de tegenpartij in een
6
- * 1-op-1. De rest komt als strip eronder te staan.
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
- * Hoeveel striptegels er hoogstens naast elkaar mogen. Wat er overblijft wordt één
11
- * `+N`-tegel. Zonder dit past een vergadering van twaalf mensen zich in een dock van
12
- * 448px in twaalf onleesbare streepjes, en dat is geen weergave meer maar een rij.
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
- * Layout primitive for meeting views. When `pinned` is provided it gets the
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
- * De teller neemt zelf een plek in anders vervangt hij één tegel door de mededeling dat er
33
- * één tegel weg is, en dat is geen winst. Bij precies genoeg ruimte blijft hij dus weg.
21
+ * The counter takes a slot itselfotherwise 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
- * **Alles binnenin schaalt met de tegel, niet met het venster.** De tegel is zelf een
24
- * container (`@container`), zodat de avatar een percentage van zijn eigen breedte kan zijn en
25
- * de naam pas verschijnt als er plek voor is. Dat is het verschil tussen een gesprek in de
26
- * hoek-dock en hetzelfde gesprek in theater-modus: dezelfde component, twee maten, en de
27
- * viewport-breakpoints van Tailwind (`md:`) zeggen daar niets zinnigs over — die kijken naar
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;