@exsto/ds 0.0.1-rc.1 → 0.0.1-rc.13

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 (150) hide show
  1. package/README.md +108 -27
  2. package/dist/chunks/date-range-picker-CWVcHgy2.js +204 -0
  3. package/dist/chunks/date-range-picker-CWVcHgy2.js.map +1 -0
  4. package/dist/chunks/input-syWxjY2U.js +172 -0
  5. package/dist/chunks/input-syWxjY2U.js.map +1 -0
  6. package/dist/chunks/toggle-Bxg8P-61.js +490 -0
  7. package/dist/chunks/toggle-Bxg8P-61.js.map +1 -0
  8. package/dist/date-picker.js +345 -0
  9. package/dist/date-picker.js.map +1 -0
  10. package/dist/ds/src/date-picker.d.ts +9 -0
  11. package/dist/ds/src/index.d.ts +2 -3
  12. package/dist/ds/src/rich-text-editor.d.ts +8 -0
  13. package/dist/index.js +4514 -2
  14. package/dist/index.js.map +1 -0
  15. package/dist/rich-text-editor.js +905 -0
  16. package/dist/rich-text-editor.js.map +1 -0
  17. package/dist/source-hash.txt +1 -0
  18. package/dist/styles.css +938 -235
  19. package/dist/theme.css +308 -0
  20. package/dist/theme.css.d.ts +2 -0
  21. package/dist/ui/src/components/edyn/animated-number/animated-number.d.ts +30 -0
  22. package/dist/ui/src/components/edyn/animated-number/animated-number.test.d.ts +9 -0
  23. package/dist/ui/src/components/edyn/animated-number/index.d.ts +1 -0
  24. package/dist/ui/src/components/edyn/audio-player/audio-player.d.ts +3 -2
  25. package/dist/ui/src/components/edyn/date-picker/date-picker.d.ts +76 -0
  26. package/dist/ui/src/components/edyn/date-picker/date-picker.state.test.d.ts +9 -0
  27. package/dist/ui/src/components/edyn/date-picker/date-text.d.ts +40 -0
  28. package/dist/ui/src/components/edyn/date-picker/index.d.ts +2 -0
  29. package/dist/ui/src/components/edyn/date-range-picker/date-range-picker.d.ts +28 -0
  30. package/dist/ui/src/components/edyn/date-range-picker/date-range-picker.test.d.ts +9 -0
  31. package/dist/ui/src/components/edyn/date-range-picker/index.d.ts +1 -0
  32. package/dist/ui/src/components/edyn/initials-avatar/index.d.ts +1 -0
  33. package/dist/ui/src/components/edyn/initials-avatar/initials-avatar.d.ts +54 -0
  34. package/dist/ui/src/components/edyn/initials-avatar/initials-avatar.test.d.ts +10 -0
  35. package/dist/ui/src/components/edyn/multi-select/index.d.ts +1 -0
  36. package/dist/ui/src/components/edyn/multi-select/multi-select.d.ts +106 -0
  37. package/dist/ui/src/components/edyn/multi-select/multi-select.test.d.ts +9 -0
  38. package/dist/ui/src/components/edyn/progress-line/index.d.ts +1 -0
  39. package/dist/ui/src/components/edyn/progress-line/progress-line.d.ts +23 -0
  40. package/dist/ui/src/components/edyn/progress-line/progress-line.test.d.ts +9 -0
  41. package/dist/ui/src/components/edyn/rich-text-content/allow-list.d.ts +11 -0
  42. package/dist/ui/src/components/edyn/rich-text-content/index.d.ts +2 -0
  43. package/dist/ui/src/components/edyn/rich-text-content/rich-text-content.d.ts +22 -0
  44. package/dist/ui/src/components/edyn/rich-text-content/rich-text-content.test.d.ts +8 -0
  45. package/dist/ui/src/components/edyn/rich-text-editor/extensions.d.ts +18 -0
  46. package/dist/ui/src/components/edyn/rich-text-editor/index.d.ts +3 -0
  47. package/dist/ui/src/components/edyn/rich-text-editor/mention-list.d.ts +17 -0
  48. package/dist/ui/src/components/edyn/rich-text-editor/rich-text-editor.d.ts +53 -0
  49. package/dist/ui/src/components/edyn/rich-text-editor/rich-text-editor.test.d.ts +6 -0
  50. package/dist/ui/src/components/edyn/rich-text-editor/serialize.d.ts +13 -0
  51. package/dist/ui/src/components/edyn/rich-text-editor/sync.d.ts +19 -0
  52. package/dist/ui/src/components/edyn/rich-text-editor/sync.test.d.ts +11 -0
  53. package/dist/ui/src/components/edyn/rich-text-editor/toolbar.d.ts +20 -0
  54. package/dist/ui/src/components/edyn/rich-text-editor/types.d.ts +68 -0
  55. package/dist/ui/src/components/edyn/video-player/video-player.d.ts +2 -2
  56. package/dist/ui/src/components/forwarded-props.test.d.ts +8 -0
  57. package/dist/ui/src/components/ui/accordion/accordion.d.ts +9 -8
  58. package/dist/ui/src/components/ui/attachment/attachment.d.ts +1 -1
  59. package/dist/ui/src/components/ui/badge/badge.d.ts +1 -1
  60. package/dist/ui/src/components/ui/button/button.behavior.test.d.ts +8 -0
  61. package/dist/ui/src/components/ui/button/button.d.ts +1 -1
  62. package/dist/ui/src/components/ui/command/command.d.ts +17 -1
  63. package/dist/ui/src/components/ui/dropdown-menu/dropdown-menu.d.ts +12 -1
  64. package/dist/ui/src/components/ui/input-group/input-group.d.ts +1 -1
  65. package/dist/ui/src/components/ui/item/item.d.ts +1 -1
  66. package/dist/ui/src/components/ui/pagination/pagination.d.ts +3 -2
  67. package/dist/ui/src/components/ui/popover/popover.d.ts +1 -1
  68. package/dist/ui/src/components/ui/progress/progress.behavior.test.d.ts +8 -0
  69. package/dist/ui/src/components/ui/progress/progress.d.ts +43 -1
  70. package/dist/ui/src/components/ui/scroll-area/scroll-area.behavior.test.d.ts +12 -0
  71. package/dist/ui/src/components/ui/scroll-area/scroll-area.d.ts +59 -6
  72. package/dist/ui/src/components/ui/separator/separator.behavior.test.d.ts +14 -0
  73. package/dist/ui/src/components/ui/separator/separator.d.ts +14 -0
  74. package/dist/ui/src/components/ui/table/table.behavior.test.d.ts +4 -5
  75. package/dist/ui/src/components/ui/table/table.d.ts +8 -1
  76. package/dist/ui/src/components/ui/tabs/tabs.d.ts +9 -8
  77. package/dist/ui/src/index.d.ts +6 -0
  78. package/dist/ui/src/lib/first-weekday.d.ts +6 -0
  79. package/dist/ui/src/lib/focus-ring.test.d.ts +8 -0
  80. package/dist/ui/src/lib/popup-list.d.ts +53 -0
  81. package/dist/ui/src/lib/popup-list.test.d.ts +10 -0
  82. package/package.json +32 -8
  83. package/dist/chunks/toggle-group-ByNq8g7H.js +0 -4263
  84. package/dist/chunks/toggle-group-ByNq8g7H.js.map +0 -1
  85. package/dist/dom/src/context.d.ts +0 -34
  86. package/dist/dom/src/define-element.d.ts +0 -11
  87. package/dist/dom/src/field-control.d.ts +0 -5
  88. package/dist/dom/src/index.d.ts +0 -6
  89. package/dist/dom/src/mode.d.ts +0 -8
  90. package/dist/dom/src/styles.d.ts +0 -6
  91. package/dist/dom/src/theme-state.d.ts +0 -1
  92. package/dist/dom/src/types.d.ts +0 -65
  93. package/dist/ds/src/elements.d.ts +0 -12
  94. package/dist/elements/src/edx-accordion.d.ts +0 -14
  95. package/dist/elements/src/edx-accordion.test.d.ts +0 -1
  96. package/dist/elements/src/edx-alert.d.ts +0 -14
  97. package/dist/elements/src/edx-audio-player.d.ts +0 -11
  98. package/dist/elements/src/edx-avatar.d.ts +0 -10
  99. package/dist/elements/src/edx-badge.d.ts +0 -12
  100. package/dist/elements/src/edx-breadcrumb.d.ts +0 -11
  101. package/dist/elements/src/edx-button-group.d.ts +0 -7
  102. package/dist/elements/src/edx-button.d.ts +0 -20
  103. package/dist/elements/src/edx-calendar.d.ts +0 -21
  104. package/dist/elements/src/edx-card.d.ts +0 -8
  105. package/dist/elements/src/edx-checkbox.d.ts +0 -18
  106. package/dist/elements/src/edx-combobox.d.ts +0 -28
  107. package/dist/elements/src/edx-content-components.d.ts +0 -2
  108. package/dist/elements/src/edx-dialog.d.ts +0 -20
  109. package/dist/elements/src/edx-drawer.d.ts +0 -21
  110. package/dist/elements/src/edx-dropdown-menu.d.ts +0 -29
  111. package/dist/elements/src/edx-field.d.ts +0 -9
  112. package/dist/elements/src/edx-field.test.d.ts +0 -1
  113. package/dist/elements/src/edx-indicator.d.ts +0 -14
  114. package/dist/elements/src/edx-input-group.d.ts +0 -32
  115. package/dist/elements/src/edx-input-otp.d.ts +0 -19
  116. package/dist/elements/src/edx-input.d.ts +0 -31
  117. package/dist/elements/src/edx-interactive-components.d.ts +0 -2
  118. package/dist/elements/src/edx-label.d.ts +0 -6
  119. package/dist/elements/src/edx-pagination.d.ts +0 -8
  120. package/dist/elements/src/edx-popover.d.ts +0 -24
  121. package/dist/elements/src/edx-progress.d.ts +0 -10
  122. package/dist/elements/src/edx-radio-group.d.ts +0 -22
  123. package/dist/elements/src/edx-radio-group.test.d.ts +0 -1
  124. package/dist/elements/src/edx-scroll-area.d.ts +0 -15
  125. package/dist/elements/src/edx-scroll-area.test.d.ts +0 -1
  126. package/dist/elements/src/edx-select.d.ts +0 -34
  127. package/dist/elements/src/edx-separator.d.ts +0 -10
  128. package/dist/elements/src/edx-skeleton.d.ts +0 -8
  129. package/dist/elements/src/edx-slider.d.ts +0 -17
  130. package/dist/elements/src/edx-slider.test.d.ts +0 -1
  131. package/dist/elements/src/edx-switch.d.ts +0 -18
  132. package/dist/elements/src/edx-table.d.ts +0 -13
  133. package/dist/elements/src/edx-table.test.d.ts +0 -1
  134. package/dist/elements/src/edx-tabs.d.ts +0 -15
  135. package/dist/elements/src/edx-tabs.test.d.ts +0 -1
  136. package/dist/elements/src/edx-textarea.d.ts +0 -25
  137. package/dist/elements/src/edx-toggle-group.d.ts +0 -27
  138. package/dist/elements/src/edx-toggle-group.test.d.ts +0 -1
  139. package/dist/elements/src/edx-toggle.d.ts +0 -18
  140. package/dist/elements/src/edx-tooltip.d.ts +0 -28
  141. package/dist/elements/src/edx-video-player.d.ts +0 -16
  142. package/dist/elements/src/field-control-bridge.d.ts +0 -7
  143. package/dist/elements/src/index.d.ts +0 -14
  144. package/dist/elements/src/projected-content.test.d.ts +0 -1
  145. package/dist/elements/src/registry.d.ts +0 -39
  146. package/dist/elements/src/registry.test.d.ts +0 -1
  147. package/dist/elements.js +0 -4020
  148. package/dist/elements.js.map +0 -1
  149. /package/dist/{dom/src/define-element.test.d.ts → ui/src/components/edyn/date-picker/date-text.test.d.ts} +0 -0
  150. /package/dist/{dom/src/native-slot.test.d.ts → ui/src/lib/first-weekday.test.d.ts} +0 -0
@@ -0,0 +1,106 @@
1
+ import { ComponentPropsWithoutRef, ReactNode } from 'react';
2
+ /** An option: `leading` goes before its label (an avatar, a status dot), `count` after it (how many it would show). */
3
+ export type TMultiSelectOption = {
4
+ value: string;
5
+ label: string;
6
+ count?: number;
7
+ leading?: ReactNode;
8
+ };
9
+ /** Every word the component prints, so a product can translate it. */
10
+ export interface IMultiSelectLabels {
11
+ noMatches: string;
12
+ loading: string;
13
+ /** Shown when `error` is `true`; a string `error` replaces it. */
14
+ error: string;
15
+ retry: string;
16
+ loadMore: string;
17
+ loadingMore: string;
18
+ clear: string;
19
+ selectedCount: (count: number) => string;
20
+ }
21
+ export declare const DEFAULT_MULTI_SELECT_LABELS: IMultiSelectLabels;
22
+ /** Above this many options a list draws only the rows on screen. */
23
+ export declare const VIRTUALIZE_FROM = 100;
24
+ /** Anything else a button takes (data-*, aria-*, title) goes to the trigger. */
25
+ export interface IMultiSelectProps extends Omit<ComponentPropsWithoutRef<'button'>, 'placeholder' | 'value' | 'defaultValue' | 'id' | 'disabled' | 'className' | 'children' | 'onChange'> {
26
+ /** The trigger's text with nothing picked, which means no filter ("All dealer groups"). */
27
+ placeholder: string;
28
+ /** The search field's prompt ("Search dealer groups…"). */
29
+ searchPlaceholder: string;
30
+ /** The options to show now: all of a short fixed list, or in async mode the ones for the typed text. */
31
+ options: readonly TMultiSelectOption[];
32
+ value: readonly string[];
33
+ onValueChange: (value: string[]) => void;
34
+ /**
35
+ * What the trigger says once something is chosen. `selection` (default) names the one chosen or counts several;
36
+ * `label` keeps the label and only counts, so a value the page shows elsewhere (as a removable chip, say) is
37
+ * not repeated here: nothing chosen reads `placeholder`, anything chosen reads `labels.selectedCount(n)`.
38
+ */
39
+ summary?: 'selection' | 'label';
40
+ /** For a Label's htmlFor. */
41
+ id?: string;
42
+ 'aria-label'?: string;
43
+ /**
44
+ * Marks the trigger invalid: the kit's destructive border, and a screen reader says so. For a form that does not use
45
+ * Field; inside one, its invalid state already does this.
46
+ */
47
+ 'aria-invalid'?: boolean | 'true' | 'false';
48
+ /**
49
+ * The id of the text that explains it (the error). Added to what a Field names already, never replacing it.
50
+ */
51
+ 'aria-describedby'?: string;
52
+ /** Shown but not changeable (a read-only form). */
53
+ disabled?: boolean;
54
+ /** Layout only (a width); the look is the kit's. */
55
+ className?: string;
56
+ /**
57
+ * Passing this turns on ASYNC MODE, for lists that grow (people, dealer groups) and must
58
+ * be searched by the API rather than loaded whole and filtered in the browser. The
59
+ * component then never filters: it reports the typed text (after `searchDelay`) and shows
60
+ * whatever `options` the caller supplies for it. It is also called with '' each time the
61
+ * list opens, so the first page is fetched on demand, not at page load.
62
+ */
63
+ onSearchChange?: (text: string) => void;
64
+ /** How long typing must pause before `onSearchChange` is called. Async mode only. */
65
+ searchDelay?: number;
66
+ /**
67
+ * The options behind the chosen values, for the ones not in the current `options`. A
68
+ * search that no longer returns a chosen value must not make it vanish from the trigger
69
+ * or the count, so the caller says what it is called. Without a label a value shows as
70
+ * itself.
71
+ */
72
+ selectedOptions?: readonly TMultiSelectOption[];
73
+ /** The options for the typed text are on their way. The old ones stay until they arrive. */
74
+ loading?: boolean;
75
+ /** The request failed: `true` for the default message, or the message itself. */
76
+ error?: boolean | string;
77
+ onRetry?: () => void;
78
+ /** There is another page after `options`. */
79
+ hasMore?: boolean;
80
+ onLoadMore?: () => void;
81
+ /** The next page is on its way. */
82
+ loadingMore?: boolean;
83
+ labels?: Partial<IMultiSelectLabels>;
84
+ }
85
+ /**
86
+ * The options behind the chosen values, in the order they were chosen. A value with no
87
+ * known option is kept and shown as itself rather than dropped: a selection must never
88
+ * change just because a list did.
89
+ */
90
+ export declare const resolveChosen: (value: readonly string[], options: readonly TMultiSelectOption[], selectedOptions?: readonly TMultiSelectOption[]) => TMultiSelectOption[];
91
+ /** What the trigger says: the placeholder, the one picked, or a count. */
92
+ export declare const summarize: (chosen: readonly TMultiSelectOption[], placeholder: string, labels: IMultiSelectLabels, summary?: "selection" | "label") => string;
93
+ /** Every chosen name, for a tooltip on a trigger whose text is cut. With `label` the names are not shown, so it is the text itself. */
94
+ export declare const fullSelection: (chosen: readonly TMultiSelectOption[], placeholder: string, labels: IMultiSelectLabels, summary?: "selection" | "label") => string;
95
+ /**
96
+ * A choice of several from a list: a trigger shaped like a Select that says what is picked
97
+ * (the placeholder, the one picked, or a count), and a popup with a search field and checkbox
98
+ * options, with the shared popup list style, the ScrollArea's bar and fades, and virtualization
99
+ * past VIRTUALIZE_FROM options. Nothing chosen means no filter.
100
+ *
101
+ * For a short fixed list pass `options` and nothing else: the component filters them as the
102
+ * user types. For a list that grows, pass `onSearchChange` and it becomes a window onto a
103
+ * server: the caller fetches the options for the typed text, and says when they are loading,
104
+ * failed, or have another page.
105
+ */
106
+ export declare const MultiSelect: ({ placeholder, searchPlaceholder, options, value, onValueChange, id, disabled, className, onSearchChange, searchDelay, selectedOptions, loading, error, onRetry, hasMore, onLoadMore, loadingMore, labels: labelOverrides, summary, ...rest }: IMultiSelectProps) => import('react').JSX.Element;
@@ -0,0 +1,9 @@
1
+ /**
2
+ * MultiSelect: what stays chosen, what the trigger says, and what words it prints.
3
+ *
4
+ * PATH TAKEN: the rules that keep a selection stable while the list under it changes
5
+ * are plain functions, and the closed trigger renders in happy-dom. Opening the popup,
6
+ * typing, the server round trips and virtualization need a real browser, so
7
+ * e2e/multi-select.spec.ts drives those against a fake server.
8
+ */
9
+ export {};
@@ -0,0 +1 @@
1
+ export * from './progress-line';
@@ -0,0 +1,23 @@
1
+ import { ComponentPropsWithoutRef, CSSProperties } from 'react';
2
+ /**
3
+ * The line's colour: an app sets --progress-line (on :root, or on any element above the
4
+ * line) to match its accent. The fallback is read where the line is, so it follows the
5
+ * theme, which a default declared once on :root would not.
6
+ */
7
+ export declare const PROGRESS_LINE_COLOR = "var(--progress-line, var(--primary))";
8
+ export interface IProgressLineProps extends Omit<ComponentPropsWithoutRef<'div'>, 'children' | 'className' | 'style' | 'role'> {
9
+ /** Work is under way. */
10
+ active: boolean;
11
+ label?: string;
12
+ className?: string;
13
+ style?: CSSProperties;
14
+ }
15
+ /**
16
+ * A thin line in the accent (--progress-line, by default --primary) that runs along the top of what is loading (a table's rows
17
+ * under its header, a page under the top bar). It waits a moment before it shows, so
18
+ * quick work never flashes it; it eases towards the end without reaching it while the
19
+ * work runs; when the work is done it runs to the end and only then fades. More work
20
+ * before it has gone carries on from where it is. With reduced motion it is a
21
+ * full-width line that fades.
22
+ */
23
+ export declare const ProgressLine: ({ active, label, className, style, ...props }: IProgressLineProps) => import('react').JSX.Element;
@@ -0,0 +1,9 @@
1
+ /**
2
+ * ProgressLine: waits before it shows, eases while the work runs, finishes before it fades.
3
+ *
4
+ * PATH TAKEN: the phase machine is timers and state, so happy-dom with the real
5
+ * clock covers it (the delays are 150, 150 and 200ms, waited out with margin
6
+ * rather than faked). Carrying on from where the line is after more work arrives
7
+ * mid-fade needs a real computed transform, so e2e/progress-line.spec.ts covers it.
8
+ */
9
+ export {};
@@ -0,0 +1,11 @@
1
+ /**
2
+ * The HTML the rich-text editor emits, and the only HTML RichTextContent renders. An app that
3
+ * sanitises on a server takes its allow-list from here: nothing outside these elements and this
4
+ * attribute ever comes out of the editor, whatever was pasted into it.
5
+ */
6
+ export declare const RICH_TEXT_ELEMENTS: readonly ["p", "br", "hr", "strong", "em", "u", "ul", "ol", "li", "a"];
7
+ /** The attributes each element may carry. Every other element carries none (no class, no style). */
8
+ export declare const RICH_TEXT_ATTRIBUTES: Readonly<Record<string, readonly string[]>>;
9
+ /** A link must be absolute and use one of these. `javascript:`, `data:` and relative links are refused. */
10
+ export declare const RICH_TEXT_LINK_PROTOCOLS: readonly ["http", "https", "mailto"];
11
+ export declare const isAllowedRichTextHref: (href: string) => boolean;
@@ -0,0 +1,2 @@
1
+ export * from './allow-list';
2
+ export * from './rich-text-content';
@@ -0,0 +1,22 @@
1
+ import { HTMLAttributes, ReactNode } from 'react';
2
+ /**
3
+ * How rich text looks, shared by the editor and by RichTextContent so a comment reads the same while it is typed and
4
+ * after it is saved. Descendant selectors rather than classes on the elements, because the HTML that is stored carries
5
+ * no classes.
6
+ */
7
+ export declare const RICH_TEXT_BODY_CLASS = "text-sm leading-6 wrap-break-word [&_a]:text-primary [&_a]:underline [&_a]:underline-offset-2 [&_hr]:my-3 [&_hr]:border-0 [&_hr]:border-t [&_hr]:border-border [&_ol]:list-decimal [&_ol]:ps-5 [&_p+p]:mt-2 [&_ul]:list-disc [&_ul]:ps-5 [&_ul+p]:mt-2 [&_ol+p]:mt-2 [&_p+ul]:mt-2 [&_p+ol]:mt-2";
8
+ export declare const RICH_TEXT_MENTION_CLASS = "rounded-sm bg-primary/10 px-1 py-0.5 font-medium text-primary";
9
+ /** The HTML as React elements, keeping only what the editor can produce. Browser only (it needs a DOM parser). */
10
+ export declare const richTextToNodes: (html: string) => ReactNode[];
11
+ export interface IRichTextContentProps extends Omit<HTMLAttributes<HTMLDivElement>, 'children' | 'dangerouslySetInnerHTML'> {
12
+ /** The HTML to show. Only the editor's elements are rendered, whatever else it holds. */
13
+ html: string;
14
+ }
15
+ /**
16
+ * Shows rich text the editor produced (or any HTML), as the same elements the editor emits and nothing else:
17
+ * `p`, `br`, `hr`, `strong`, `em`, `u`, `ul`, `ol`, `li` and `a` with an `href` (http, https or mailto; it opens in a new tab
18
+ * with `rel="noopener noreferrer"`). Everything else is dropped and its text kept. Built as React elements, not injected
19
+ * as markup, so it is safe on HTML that has not been cleaned. A run like `@name@example.test` or `@assignees` is shown
20
+ * as a chip.
21
+ */
22
+ export declare const RichTextContent: ({ html, className, ...props }: IRichTextContentProps) => import('react').JSX.Element;
@@ -0,0 +1,8 @@
1
+ /**
2
+ * RichTextContent shows saved HTML as the editor's own elements and nothing else. It is built as React elements,
3
+ * so these assertions read the markup it renders: a script or a javascript: link that survived would show here.
4
+ *
5
+ * PATH TAKEN: happy-dom parses the input (DOMParser) and renderToStaticMarkup prints the result, which is enough
6
+ * for what this component decides (what stays, what goes, what is added). How it looks is the browser spec's.
7
+ */
8
+ export {};
@@ -0,0 +1,18 @@
1
+ import { Extension } from '@tiptap/core';
2
+ import { SuggestionKeyDownProps, SuggestionProps } from '@tiptap/suggestion';
3
+ import { TMentionToText } from './serialize';
4
+ import { IRichTextMentionItem } from './types';
5
+ /** What the editor needs from the component while it runs. Held in a ref, so the extensions are built once. */
6
+ export interface IEditorHost {
7
+ mentionEnabled: () => boolean;
8
+ maxLength: () => number | undefined;
9
+ toText: () => TMentionToText;
10
+ onSuggestion: (props: SuggestionProps<IRichTextMentionItem, IRichTextMentionItem> | null) => void;
11
+ onSuggestionKey: (props: SuggestionKeyDownProps) => boolean;
12
+ }
13
+ /**
14
+ * The editor's whole schema: paragraph, line break, bold, italic, underline, bullet and numbered lists, link, and the
15
+ * mention chip. Whatever else arrives (a paste, `value`) is not in the schema, so ProseMirror drops the markup and keeps
16
+ * the text.
17
+ */
18
+ export declare const buildExtensions: (host: IEditorHost) => (Extension<any, any> | import('@tiptap/core').Node<any, any> | import('@tiptap/core').Node<import('@tiptap/extension-paragraph').ParagraphOptions, any> | import('@tiptap/core').Node<import('@tiptap/extension-hard-break').HardBreakOptions, any> | import('@tiptap/core').Mark<import('@tiptap/extension-bold').BoldOptions, any> | import('@tiptap/core').Node<import('@tiptap/extension-list').BulletListOptions, any> | import('@tiptap/core').Node<import('@tiptap/extension-list').ListItemOptions, any> | import('@tiptap/core').Node<import('@tiptap/extension-horizontal-rule').HorizontalRuleOptions, any> | import('@tiptap/core').Mark<import('@tiptap/extension-link').LinkOptions, any> | Extension<import('@tiptap/extensions').UndoRedoOptions, any> | import('@tiptap/core').Node<import('@tiptap/extension-mention').MentionOptions<any, import('@tiptap/extension-mention').MentionNodeAttrs>, any>)[];
@@ -0,0 +1,3 @@
1
+ export { RICH_TEXT_ATTRIBUTES, RICH_TEXT_ELEMENTS, RICH_TEXT_LINK_PROTOCOLS } from '../rich-text-content/allow-list';
2
+ export * from './rich-text-editor';
3
+ export * from './types';
@@ -0,0 +1,17 @@
1
+ import { RefObject } from 'react';
2
+ import { IRichTextLabels, IRichTextMention, IRichTextMentionItem } from './types';
3
+ export interface IMentionListProps {
4
+ query: string;
5
+ /** Where the @ was typed. */
6
+ rect: (() => DOMRect | null) | null;
7
+ config: IRichTextMention;
8
+ labels: IRichTextLabels;
9
+ listId: string;
10
+ onPick: (item: IRichTextMentionItem) => void;
11
+ /** The editor keeps focus, so the list is driven by its keys: the editor calls this one. */
12
+ keyHandler: RefObject<((event: KeyboardEvent) => boolean) | null>;
13
+ /** The id of the option the editor should name as `aria-activedescendant`. */
14
+ onActiveChange: (optionId: string | undefined) => void;
15
+ }
16
+ /** The list that opens under the caret when the writer types @. */
17
+ export declare const MentionList: ({ query, rect, config, labels, listId, onPick, keyHandler, onActiveChange }: IMentionListProps) => import('react').JSX.Element;
@@ -0,0 +1,53 @@
1
+ import { ComponentPropsWithoutRef, Ref } from 'react';
2
+ import { IRichTextEditorHandle, IRichTextField, IRichTextLabels, IRichTextMention } from './types';
3
+ export interface IRichTextEditorProps extends Omit<ComponentPropsWithoutRef<'div'>, 'children' | 'defaultValue' | 'onChange' | 'id'> {
4
+ /** The HTML, when the parent owns it. Pass back what `onChange` gave. An empty editor is `""`. */
5
+ value?: string;
6
+ /** The HTML to start from when the editor owns its own value. */
7
+ defaultValue?: string;
8
+ /** Called with the HTML after every edit. Only the elements in `RICH_TEXT_ELEMENTS` can appear, and `""` when there is no text. */
9
+ onChange?: (html: string) => void;
10
+ placeholder?: string;
11
+ disabled?: boolean;
12
+ /** Shows the content and keeps it selectable and copyable, with no toolbar. */
13
+ readOnly?: boolean;
14
+ /** Draws the error border and sets `aria-invalid`. The message is the form's to draw: point `aria-describedby` at it. */
15
+ invalid?: boolean;
16
+ /**
17
+ * Lines the box is tall when empty.
18
+ * @default 6
19
+ */
20
+ minRows?: number;
21
+ /**
22
+ * Lines it grows to before it scrolls inside.
23
+ * @default 20
24
+ */
25
+ maxRows?: number;
26
+ /** The most characters of text (a mention counts as the text it is written as). An edit past it is refused. Off by default. */
27
+ maxLength?: number;
28
+ /** Turns @ into a search the app answers. Without it, @ is an ordinary character. */
29
+ mention?: IRichTextMention;
30
+ /** Adds an "Insert a field" menu that writes `{{id}}` at the caret. */
31
+ fields?: IRichTextField[];
32
+ /**
33
+ * Whether the formatting toolbar shows.
34
+ * @default true
35
+ */
36
+ toolbar?: boolean;
37
+ /** Replaces any of the strings the editor shows (the defaults are English). */
38
+ labels?: Partial<IRichTextLabels>;
39
+ /** On the editable element, so a form can name it. */
40
+ id?: string;
41
+ autoFocus?: boolean;
42
+ /** Called with the files when the writer pastes only files (a screenshot). Without it, such a paste does nothing. */
43
+ onPasteFiles?: (files: File[]) => void;
44
+ /** Gives `insertText` and `focus`, for buttons outside the editor. */
45
+ ref?: Ref<IRichTextEditorHandle>;
46
+ }
47
+ /**
48
+ * A small rich-text field: paragraphs, bold, italic, underline, bulleted and numbered lists and links, with optional
49
+ * @mentions the app answers asynchronously. The value is HTML in and out, and only the elements in `RICH_TEXT_ELEMENTS`
50
+ * can come out (no class, no style), whatever is pasted. A mention is a chip while editing and plain text in the HTML.
51
+ * The server should still sanitise: this is a convenience for the writer, not a security boundary.
52
+ */
53
+ export declare const RichTextEditor: ({ value, defaultValue, onChange, placeholder, disabled, readOnly, invalid, minRows, maxRows, maxLength, mention, fields, toolbar, labels, id, autoFocus, onPasteFiles, ref, className, "aria-invalid": ariaInvalid, "aria-label": ariaLabel, "aria-labelledby": ariaLabelledBy, "aria-describedby": ariaDescribedBy, ...props }: IRichTextEditorProps) => import('react').JSX.Element;
@@ -0,0 +1,6 @@
1
+ /**
2
+ * The editor's schema decides what HTML can come out, whatever goes in. These tests drive the real extension set
3
+ * through a headless ProseMirror editor and read what it serialises, so the allow-list the docs promise is the one
4
+ * that is checked. Typing, focus and the mention list need a real browser: e2e/rich-text-editor.spec.ts.
5
+ */
6
+ export {};
@@ -0,0 +1,13 @@
1
+ import { Node as TProseNode } from '@tiptap/pm/model';
2
+ import { IRichTextMention } from './types';
3
+ export type TMentionToText = NonNullable<IRichTextMention['toText']>;
4
+ export declare const defaultMentionToText: TMentionToText;
5
+ /**
6
+ * The document as HTML. Not `editor.getHTML()`: that would write a mention as its chip element, and
7
+ * the HTML must carry the plain text the app chose (`@person@example.test`) and nothing else.
8
+ */
9
+ export declare const serializeDocument: (doc: TProseNode, toText: TMentionToText) => string;
10
+ /** No text and no mention. A document of blank paragraphs, spaces and line breaks is empty too. */
11
+ export declare const isDocumentEmpty: (doc: TProseNode) => boolean;
12
+ /** Characters the HTML text will have: a mention counts as the text it is written as. */
13
+ export declare const countCharacters: (doc: TProseNode, toText: TMentionToText) => number;
@@ -0,0 +1,19 @@
1
+ import { Editor } from '@tiptap/core';
2
+ /**
3
+ * Whether commands may be called on the editor. TipTap builds an editor during the render, mounts its view later, and
4
+ * destroys one that has not been mounted within a moment (useEditor then makes a new one), so an effect can be handed an
5
+ * editor that is not there yet or no longer is. `isDestroyed` is true for both: it reads true until the view exists. A
6
+ * destroyed editor has no command manager, so `editor.commands` throws on it.
7
+ */
8
+ export declare const isLive: (editor: Editor) => boolean;
9
+ /**
10
+ * Brings the editor to a value the parent passed in, if it is one the editor did not just report itself.
11
+ * `known` is the last HTML the editor and the parent agree on (the starting value, then whatever the editor emitted or was
12
+ * given). The caret stays where it was, kept inside the new content, so a value changed from outside while the writer is
13
+ * typing does not throw the caret to the start.
14
+ */
15
+ export declare const syncValue: (editor: Editor, value: string | undefined, known: {
16
+ current: string | undefined;
17
+ }) => void;
18
+ /** Sets whether the editor can be edited without telling the app something changed (TipTap emits an update by default). */
19
+ export declare const syncEditable: (editor: Editor, editable: boolean) => void;
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Keeping the editor in step with the parent's value without ever touching an editor that is not there. A controlled
3
+ * RichTextEditor crashed on mount in rc.7 ("Cannot read properties of null (reading 'commands')"): TipTap makes the editor
4
+ * during the render, mounts its view later and destroys one that is not mounted in time, and the value effect ran at the
5
+ * first commit for every controlled value and called a command on whatever editor it was handed.
6
+ *
7
+ * PATH TAKEN: the destroyed editor is reproduced as the state TipTap leaves it in (no command manager, so `commands`
8
+ * throws), because the timing that produces it in an app cannot be driven from a test. The real behaviour in a browser,
9
+ * mount order included, is e2e/rich-text-editor-lifecycle.spec.ts.
10
+ */
11
+ export {};
@@ -0,0 +1,20 @@
1
+ import { Editor } from '@tiptap/core';
2
+ import { RefObject } from 'react';
3
+ import { IRichTextField, IRichTextLabels } from './types';
4
+ /** A typed address becomes a link: "name@example.test" a mailto, "example.test" an https address. */
5
+ export declare const normalizeHref: (raw: string) => string;
6
+ /** Where the writer's selection was when the link box opened: moving focus into the box must not lose it. */
7
+ export interface ILinkRange {
8
+ from: number;
9
+ to: number;
10
+ }
11
+ export interface IRichTextToolbarProps {
12
+ linkRange: RefObject<ILinkRange | null>;
13
+ editor: Editor;
14
+ labels: IRichTextLabels;
15
+ fields: IRichTextField[] | undefined;
16
+ disabled: boolean;
17
+ linkOpen: boolean;
18
+ onLinkOpenChange: (open: boolean) => void;
19
+ }
20
+ export declare const RichTextToolbar: ({ linkRange, editor, labels, fields, disabled, linkOpen, onLinkOpenChange }: IRichTextToolbarProps) => import('react').JSX.Element;
@@ -0,0 +1,68 @@
1
+ /** One person (or anything else) the app offers when the writer types @. */
2
+ export interface IRichTextMentionItem {
3
+ /** What the HTML carries. By default the value is written as `@${id}`, so an email address works as an id. */
4
+ id: string;
5
+ /** What the chip shows while the text is being edited. */
6
+ label: string;
7
+ /** A second, muted line in the list (a role, an email address). */
8
+ secondary?: string;
9
+ }
10
+ /** A page of results. Return a plain array instead when there is only ever one page. */
11
+ export interface IRichTextMentionPage {
12
+ items: IRichTextMentionItem[];
13
+ /** True when asking for `page + 1` would return more. The list loads it when it is scrolled to the end. */
14
+ hasMore?: boolean;
15
+ }
16
+ export interface IRichTextMentionSearchOptions {
17
+ /** 1-based. */
18
+ page: number;
19
+ /** Aborted when the writer types on or closes the list: pass it to `fetch` so a stale search stops. */
20
+ signal: AbortSignal;
21
+ }
22
+ export type TRichTextMentionSearch = (query: string, options: IRichTextMentionSearchOptions) => Promise<IRichTextMentionItem[] | IRichTextMentionPage>;
23
+ export interface IRichTextMention {
24
+ /** Asked for the first page when the writer types @ and again for every change of the text after it, debounced. */
25
+ search: TRichTextMentionSearch;
26
+ /**
27
+ * How a mention is written into the HTML. The chip exists only while editing; the HTML carries this text
28
+ * and no element. Default: `@${item.id}`.
29
+ */
30
+ toText?: (item: Pick<IRichTextMentionItem, 'id' | 'label'>) => string;
31
+ /** Milliseconds to wait after the last keystroke before searching. Default 250. */
32
+ debounce?: number;
33
+ }
34
+ /** A field of a template (a mail merge token). Inserted as the plain text `{{id}}`. */
35
+ export interface IRichTextField {
36
+ id: string;
37
+ label: string;
38
+ }
39
+ /** What a ref to the editor can do, for a button outside it (a merge tag, say). */
40
+ export interface IRichTextEditorHandle {
41
+ /** Writes plain text at the caret (over the selection), and puts focus back in the editor. */
42
+ insertText: (text: string) => void;
43
+ focus: () => void;
44
+ }
45
+ /** Every string the editor shows, so an app can translate them. */
46
+ export interface IRichTextLabels {
47
+ toolbar: string;
48
+ bold: string;
49
+ italic: string;
50
+ underline: string;
51
+ bulletList: string;
52
+ numberedList: string;
53
+ link: string;
54
+ horizontalRule: string;
55
+ insertField: string;
56
+ linkAddress: string;
57
+ linkApply: string;
58
+ linkRemove: string;
59
+ linkInvalid: string;
60
+ mentionList: string;
61
+ mentionSearching: string;
62
+ mentionEmpty: string;
63
+ mentionError: string;
64
+ mentionLoadingMore: string;
65
+ /** Announced as the list changes. `{count}` is replaced. */
66
+ mentionResults: string;
67
+ }
68
+ export declare const DEFAULT_RICH_TEXT_LABELS: IRichTextLabels;
@@ -1,6 +1,6 @@
1
1
  import { TCssLength } from '../../../lib/utils';
2
2
  import * as React from 'react';
3
- export interface IVideoPlayerProps {
3
+ export interface IVideoPlayerProps extends Omit<React.ComponentPropsWithoutRef<'div'>, 'children' | 'className' | 'title' | 'onPlay' | 'onPause' | 'onEnded' | 'onTimeUpdate'> {
4
4
  /** Video source URL. */
5
5
  src?: string;
6
6
  /** Still frame shown before playback starts. */
@@ -52,4 +52,4 @@ export interface IVideoPlayerProps {
52
52
  * both themes. Video is dark, so the letterbox and controls must stay dark and
53
53
  * light-on-dark; this re-scopes existing tokens rather than hardcoding a colour.
54
54
  */
55
- export declare const VideoPlayer: ({ src, poster, title, description, muted, loop, disabled, width, height, ratio, className, "aria-label": ariaLabel, onPlay, onPause, onEnded, onTimeUpdate, }: IVideoPlayerProps) => React.JSX.Element;
55
+ export declare const VideoPlayer: ({ src, poster, title, description, muted, loop, disabled, width, height, ratio, className, "aria-label": ariaLabel, style, onPlay, onPause, onEnded, onTimeUpdate, ...props }: IVideoPlayerProps) => React.JSX.Element;
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Every exported component hands `aria-label`, `id` and `data-testid` to the element it documents as its root or main part.
3
+ * A component that took a closed list of props dropped the rest (Tabs' tablist had no accessible name even though the app
4
+ * passed `aria-label`), so this renders each one with the three and finds them again.
5
+ *
6
+ * Components that are not covered here, and why, are listed in INTENTIONAL_DROPS.
7
+ */
8
+ export {};
@@ -1,5 +1,6 @@
1
+ import { Accordion as BaseAccordion } from '@base-ui/react/accordion';
1
2
  import type * as React from 'react';
2
- export interface IAccordionProps {
3
+ export interface IAccordionProps extends Omit<BaseAccordion.Root.Props, 'value' | 'defaultValue' | 'onValueChange' | 'multiple' | 'className' | 'children'> {
3
4
  value?: string[];
4
5
  defaultValue?: string[];
5
6
  onValueChange?: (value: string[]) => void;
@@ -7,21 +8,21 @@ export interface IAccordionProps {
7
8
  className?: string;
8
9
  children: React.ReactNode;
9
10
  }
10
- export declare const Accordion: ({ value, defaultValue, onValueChange, multiple, className, children }: IAccordionProps) => React.JSX.Element;
11
- export interface IAccordionItemProps {
11
+ export declare const Accordion: ({ value, defaultValue, onValueChange, multiple, className, children, ...props }: IAccordionProps) => React.JSX.Element;
12
+ export interface IAccordionItemProps extends Omit<BaseAccordion.Item.Props, 'value' | 'disabled' | 'className' | 'children'> {
12
13
  value: string;
13
14
  disabled?: boolean;
14
15
  className?: string;
15
16
  children: React.ReactNode;
16
17
  }
17
- export declare const AccordionItem: ({ value, disabled, className, children }: IAccordionItemProps) => React.JSX.Element;
18
- export interface IAccordionTriggerProps {
18
+ export declare const AccordionItem: ({ value, disabled, className, children, ...props }: IAccordionItemProps) => React.JSX.Element;
19
+ export interface IAccordionTriggerProps extends Omit<BaseAccordion.Trigger.Props, 'className' | 'children'> {
19
20
  className?: string;
20
21
  children: React.ReactNode;
21
22
  }
22
- export declare const AccordionTrigger: ({ className, children }: IAccordionTriggerProps) => React.JSX.Element;
23
- export interface IAccordionContentProps {
23
+ export declare const AccordionTrigger: ({ className, children, ...props }: IAccordionTriggerProps) => React.JSX.Element;
24
+ export interface IAccordionContentProps extends Omit<BaseAccordion.Panel.Props, 'className' | 'children'> {
24
25
  className?: string;
25
26
  children: React.ReactNode;
26
27
  }
27
- export declare const AccordionContent: ({ className, children }: IAccordionContentProps) => React.JSX.Element;
28
+ export declare const AccordionContent: ({ className, children, ...props }: IAccordionContentProps) => React.JSX.Element;
@@ -10,7 +10,7 @@ export declare const Attachment: ({ className, state, size, orientation, ...prop
10
10
  state?: "idle" | "uploading" | "processing" | "error" | "done";
11
11
  }) => React.JSX.Element;
12
12
  declare const attachmentMediaVariants: (props?: ({
13
- variant?: "image" | "icon" | null | undefined;
13
+ variant?: "icon" | "image" | null | undefined;
14
14
  } & import('class-variance-authority/types').ClassProp) | undefined) => string;
15
15
  export declare const AttachmentMedia: ({ className, variant, ...props }: React.ComponentProps<"div"> & VariantProps<typeof attachmentMediaVariants>) => React.JSX.Element;
16
16
  export declare const AttachmentContent: ({ className, ...props }: React.ComponentProps<"div">) => React.JSX.Element;
@@ -1,7 +1,7 @@
1
1
  import { useRender } from '@base-ui/react/use-render';
2
2
  import { VariantProps } from 'class-variance-authority';
3
3
  export declare const badgeVariants: (props?: ({
4
- variant?: "link" | "default" | "outline" | "secondary" | "ghost" | "destructive" | "success" | "warning" | "info" | null | undefined;
4
+ variant?: "default" | "outline" | "secondary" | "ghost" | "destructive" | "link" | "success" | "warning" | "info" | null | undefined;
5
5
  size?: "default" | "lg" | null | undefined;
6
6
  } & import('class-variance-authority/types').ClassProp) | undefined) => string;
7
7
  export declare const Badge: ({ className, variant, size, render, ...props }: useRender.ComponentProps<"span"> & VariantProps<typeof badgeVariants>) => import('react').ReactElement<unknown, string | import('react').JSXElementConstructor<any>>;
@@ -0,0 +1,8 @@
1
+ /**
2
+ * A Button that renders a link has to stay a link.
3
+ *
4
+ * PATH TAKEN: the roles and attributes Base UI emits do not depend on layout, so
5
+ * happy-dom is enough to assert what assistive technology would be told. The
6
+ * axe scan over the demo pages covers it again in a real browser.
7
+ */
8
+ export {};
@@ -1,7 +1,7 @@
1
1
  import { Button as ButtonPrimitive } from '@base-ui/react/button';
2
2
  import { VariantProps } from 'class-variance-authority';
3
3
  export declare const buttonVariants: (props?: ({
4
- variant?: "link" | "default" | "outline" | "secondary" | "ghost" | "destructive" | null | undefined;
4
+ variant?: "default" | "outline" | "secondary" | "ghost" | "destructive" | "link" | null | undefined;
5
5
  size?: "default" | "xs" | "sm" | "lg" | "icon" | "icon-xs" | "icon-sm" | "icon-lg" | null | undefined;
6
6
  } & import('class-variance-authority/types').ClassProp) | undefined) => string;
7
7
  export declare const Button: ({ className, variant, size, ...props }: ButtonPrimitive.Props & VariantProps<typeof buttonVariants>) => import('react').JSX.Element;
@@ -10,7 +10,23 @@ export declare const CommandDialog: ({ title, description, children, className,
10
10
  children: React.ReactNode;
11
11
  }) => React.JSX.Element;
12
12
  export declare const CommandInput: ({ className, ...props }: React.ComponentProps<typeof CommandPrimitive.Input>) => React.JSX.Element;
13
- export declare const CommandList: ({ className, ...props }: React.ComponentProps<typeof CommandPrimitive.List>) => React.JSX.Element;
13
+ /**
14
+ * The palette's results list. The scroll container is the DS ScrollArea rather
15
+ * than the primitive's own `overflow-y-auto`, because a list of results that
16
+ * continues past the fold with no bar and no fade reads as a complete list. The
17
+ * cap stays overridable: `cn` lets a caller's own `max-h-*` replace the default.
18
+ *
19
+ * The ScrollArea wraps the list from OUTSIDE rather than lining it: cmdk's list
20
+ * carries `role="listbox"`, and a listbox may not contain presentation wrappers
21
+ * (axe flags that as a critical aria-required-children violation). The options
22
+ * have to stay direct children of the element that holds the role.
23
+ *
24
+ * cmdk keeps the active item in view with `scrollIntoView({ block: 'nearest' })`
25
+ * on the item, which acts on the nearest scrollable ancestor, so that keeps
26
+ * working now that the viewport is the one that scrolls. `scroll-py-1` goes on
27
+ * the viewport for the same reason: it is what pads that scroll.
28
+ */
29
+ export declare const CommandList: ({ className, children, ...props }: React.ComponentProps<typeof CommandPrimitive.List>) => React.JSX.Element;
14
30
  export declare const CommandEmpty: ({ className, ...props }: React.ComponentProps<typeof CommandPrimitive.Empty>) => React.JSX.Element;
15
31
  export declare const CommandGroup: ({ className, ...props }: React.ComponentProps<typeof CommandPrimitive.Group>) => React.JSX.Element;
16
32
  export declare const CommandSeparator: ({ className, ...props }: React.ComponentProps<typeof CommandPrimitive.Separator>) => React.JSX.Element;
@@ -3,7 +3,18 @@ import type * as React from 'react';
3
3
  export declare const DropdownMenu: ({ ...props }: MenuPrimitive.Root.Props) => React.JSX.Element;
4
4
  export declare const DropdownMenuPortal: ({ ...props }: MenuPrimitive.Portal.Props) => React.JSX.Element;
5
5
  export declare const DropdownMenuTrigger: ({ ...props }: MenuPrimitive.Trigger.Props) => React.JSX.Element;
6
- export declare const DropdownMenuContent: ({ align, alignOffset, side, sideOffset, className, ...props }: MenuPrimitive.Popup.Props & Pick<MenuPrimitive.Positioner.Props, "align" | "alignOffset" | "side" | "sideOffset">) => React.JSX.Element;
6
+ /**
7
+ * Scrolls inside a DS ScrollArea like the other popup lists, with the bar shown
8
+ * for as long as the menu overflows and a fade on whichever end is cut off.
9
+ *
10
+ * Base UI puts `role="menu"` on this popup itself and offers no inner list part
11
+ * to move it onto, so the ScrollArea sits INSIDE the role. That is only legal
12
+ * because ScrollArea drops the `role="presentation"` Base UI gives its root,
13
+ * viewport and content: a menu may not own presentation wrappers (axe reports
14
+ * a critical aria-required-children violation), but it may own plain divs.
15
+ * e2e/a11y.spec.ts scans the open menu in both themes to keep it that way.
16
+ */
17
+ export declare const DropdownMenuContent: ({ align, alignOffset, side, sideOffset, className, children, ...props }: MenuPrimitive.Popup.Props & Pick<MenuPrimitive.Positioner.Props, "align" | "alignOffset" | "side" | "sideOffset">) => React.JSX.Element;
7
18
  export declare const DropdownMenuGroup: ({ ...props }: MenuPrimitive.Group.Props) => React.JSX.Element;
8
19
  export declare const DropdownMenuLabel: ({ className, inset, ...props }: MenuPrimitive.GroupLabel.Props & {
9
20
  inset?: boolean;
@@ -6,7 +6,7 @@ export interface IInputGroupProps extends React.ComponentProps<'div'> {
6
6
  export declare const InputGroup: ({ className, ...props }: IInputGroupProps) => React.JSX.Element;
7
7
  export type TInputGroupAddonAlign = 'inline-start' | 'inline-end' | 'block-start' | 'block-end';
8
8
  declare const inputGroupAddonVariants: (props?: ({
9
- align?: "inline-start" | "inline-end" | "block-start" | "block-end" | null | undefined;
9
+ align?: "inline-end" | "inline-start" | "block-end" | "block-start" | null | undefined;
10
10
  } & import('class-variance-authority/types').ClassProp) | undefined) => string;
11
11
  export interface IInputGroupAddonProps extends React.ComponentProps<'div'>, VariantProps<typeof inputGroupAddonVariants> {
12
12
  }
@@ -10,7 +10,7 @@ declare const itemVariants: (props?: ({
10
10
  } & import('class-variance-authority/types').ClassProp) | undefined) => string;
11
11
  export declare const Item: ({ className, variant, size, render, ...props }: useRender.ComponentProps<"div"> & VariantProps<typeof itemVariants>) => React.ReactElement<unknown, string | React.JSXElementConstructor<any>>;
12
12
  declare const itemMediaVariants: (props?: ({
13
- variant?: "default" | "image" | "icon" | null | undefined;
13
+ variant?: "default" | "icon" | "image" | null | undefined;
14
14
  } & import('class-variance-authority/types').ClassProp) | undefined) => string;
15
15
  export declare const ItemMedia: ({ className, variant, ...props }: React.ComponentProps<"div"> & VariantProps<typeof itemMediaVariants>) => React.JSX.Element;
16
16
  export declare const ItemContent: ({ className, ...props }: React.ComponentProps<"div">) => React.JSX.Element;