@allxsmith/bestax-bulma 5.35.0 → 5.36.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (44) hide show
  1. package/dist/bestax.css +1 -1
  2. package/dist/bestax.css.map +1 -1
  3. package/dist/esm/components/EmptyState.js +2 -2
  4. package/dist/esm/components/EmptyState.js.map +1 -1
  5. package/dist/esm/components/Timeline.js +150 -0
  6. package/dist/esm/components/Timeline.js.map +1 -0
  7. package/dist/esm/elements/Icon.js +2 -3
  8. package/dist/esm/elements/Icon.js.map +1 -1
  9. package/dist/esm/form/Autocomplete.js +2 -2
  10. package/dist/esm/form/Autocomplete.js.map +1 -1
  11. package/dist/esm/form/Taginput.js +64 -55
  12. package/dist/esm/form/Taginput.js.map +1 -1
  13. package/dist/esm/form/useAutoLabelId.js +3 -3
  14. package/dist/esm/form/useAutoLabelId.js.map +1 -1
  15. package/dist/extras.css +1 -1
  16. package/dist/extras.css.map +1 -1
  17. package/dist/index.cjs +896 -748
  18. package/dist/index.cjs.map +1 -1
  19. package/dist/index.esm.js +1 -0
  20. package/dist/index.esm.js.map +1 -1
  21. package/dist/types/components/Timeline.d.ts +130 -0
  22. package/dist/types/elements/Icon.d.ts +6 -1
  23. package/dist/types/form/Taginput.d.ts +12 -5
  24. package/dist/types/index.d.ts +1 -0
  25. package/dist/types-cjs/components/Timeline.d.ts +130 -0
  26. package/dist/types-cjs/elements/Icon.d.ts +6 -1
  27. package/dist/types-cjs/form/Taginput.d.ts +12 -5
  28. package/dist/types-cjs/index.d.ts +1 -0
  29. package/dist/versions/bestax-no-dark-mode.css +1 -1
  30. package/dist/versions/bestax-no-dark-mode.css.map +1 -1
  31. package/dist/versions/bestax-no-helpers-prefixed.css +1 -1
  32. package/dist/versions/bestax-no-helpers-prefixed.css.map +1 -1
  33. package/dist/versions/bestax-no-helpers.css +1 -1
  34. package/dist/versions/bestax-no-helpers.css.map +1 -1
  35. package/dist/versions/bestax-prefixed.css +1 -1
  36. package/dist/versions/bestax-prefixed.css.map +1 -1
  37. package/package.json +1 -1
  38. package/src/scss/components/_index.scss +2 -0
  39. package/src/scss/components/_loading.scss +26 -0
  40. package/src/scss/components/_menu.scss +37 -0
  41. package/src/scss/components/_timeline.scss +371 -0
  42. package/src/scss/form/_checkbox.scss +14 -14
  43. package/src/scss/form/_radio.scss +12 -12
  44. package/src/scss/form/_switch.scss +21 -21
package/dist/index.esm.js CHANGED
@@ -24,6 +24,7 @@ export { Popover, PopoverBody, PopoverClose, PopoverFooter, PopoverHeader } from
24
24
  export { HoverCard } from './esm/components/HoverCard.js';
25
25
  export { ContextMenu } from './esm/components/ContextMenu.js';
26
26
  export { Step, Steps } from './esm/components/Steps.js';
27
+ export { Timeline, TimelineItem } from './esm/components/Timeline.js';
27
28
  export { Sidebar } from './esm/components/Sidebar.js';
28
29
  export { Toast, ToastContainer, toast } from './esm/components/Toast.js';
29
30
  export { Dialog, DialogContainer, dialog } from './esm/components/Dialog.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.esm.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.esm.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -0,0 +1,130 @@
1
+ import React from 'react';
2
+ import { BulmaClassesProps, validColors } from '../helpers/useBulmaClasses.js';
3
+ declare const validTimelineColors: readonly ["primary", "link", "info", "success", "warning", "danger"];
4
+ /** The Bulma colors a marker takes. */
5
+ export type TimelineColor = (typeof validTimelineColors)[number];
6
+ declare const validTimelineTitleElements: readonly ["h2", "h3", "h4", "h5", "h6", "p"];
7
+ /** What each item's title renders as: a heading level, or `p` for a plain line. */
8
+ export type TimelineTitleElement = (typeof validTimelineTitleElements)[number];
9
+ /** Where the rail goes. */
10
+ export type TimelineAlign = 'start' | 'end' | 'alternate';
11
+ /**
12
+ * Props for the Timeline component. The helper props, the other attributes
13
+ * and the `ref` land on the `<ol>`.
14
+ *
15
+ * @extraProp {React.Ref<HTMLOListElement>} [ref] - Ref forwarded to the `<ol>`.
16
+ */
17
+ export interface TimelineProps extends Omit<React.OlHTMLAttributes<HTMLOListElement>, 'color' | 'role'>, Omit<BulmaClassesProps, 'color' | 'backgroundColor'> {
18
+ /** Additional CSS classes to apply. */
19
+ className?: string;
20
+ /**
21
+ * `Timeline.Item`s, in the order they're read: newest first or oldest
22
+ * first for a record, oldest first with `active` or `pending`.
23
+ */
24
+ children?: React.ReactNode;
25
+ /**
26
+ * Marks progress. The item at this index, counting the children from 0, is
27
+ * current; the ones before it are completed and the ones after it are
28
+ * upcoming. Leave it out for a record, where nothing is marked. `-1` marks
29
+ * every item upcoming, and an index past the last marks them all completed.
30
+ * A fraction counts as the item it has reached, so `2.5` marks the third
31
+ * item current. Each child counts as one item, with Fragments and arrays opened up, so
32
+ * render one item per child. A component of your own around a
33
+ * `Timeline.Item` still gets its state, but one that renders nothing still
34
+ * counts.
35
+ */
36
+ active?: number;
37
+ /**
38
+ * What's under way, as a last item after the children: its title, read
39
+ * with `pendingLabel`. Write it as words that say so ("Out for delivery").
40
+ */
41
+ pending?: React.ReactNode;
42
+ /**
43
+ * `start`: the rail at the start of the line. `end`: at the end, with the
44
+ * text against it. `alternate`: down the middle, the items taking turns and
45
+ * each time across the rail; below Bulma's tablet breakpoint it's `start`.
46
+ */
47
+ align?: TimelineAlign;
48
+ /**
49
+ * What every item's title renders as: a heading at the level under the
50
+ * heading the timeline sits beneath, or `p` for a busy feed.
51
+ */
52
+ titleAs?: TimelineTitleElement;
53
+ /**
54
+ * The markers' color, and the color of progress with `active`. Neutral
55
+ * without it, and Bulma's `link` for progress. The markers are hidden from
56
+ * assistive tech, so say what a color means in the words too.
57
+ */
58
+ color?: TimelineColor;
59
+ /** Read after a completed item's title, visually hidden. In your app's language. */
60
+ completedLabel?: string;
61
+ /** Read after an upcoming item's title, visually hidden. In your app's language. */
62
+ upcomingLabel?: string;
63
+ /** Read after the pending item's title, visually hidden. In your app's language. */
64
+ pendingLabel?: string;
65
+ /** Text color helper. */
66
+ textColor?: (typeof validColors)[number] | 'inherit' | 'current';
67
+ /** Background color helper. */
68
+ bgColor?: (typeof validColors)[number] | 'inherit' | 'current';
69
+ }
70
+ /**
71
+ * Props for Timeline.Item, one event. The helper props, the other attributes
72
+ * and the `ref` land on its `<li>`. The native `title` attribute isn't one of
73
+ * them, since `title` here is the event's title.
74
+ *
75
+ * @extraProp {React.Ref<HTMLLIElement>} [ref] - Ref forwarded to the `<li>`.
76
+ */
77
+ export interface TimelineItemProps extends Omit<React.LiHTMLAttributes<HTMLLIElement>, 'color' | 'title'>, Omit<BulmaClassesProps, 'color' | 'backgroundColor'> {
78
+ /** Additional CSS classes to apply. */
79
+ className?: string;
80
+ /** What happened, in a line. It renders as the root's `titleAs`. */
81
+ title?: React.ReactNode;
82
+ /**
83
+ * When it happened, as the reader sees it: "14 October 2026", "2 hours
84
+ * ago". Put the whole date in the words, since screen readers mostly read
85
+ * the text.
86
+ */
87
+ time?: React.ReactNode;
88
+ /**
89
+ * The same moment for machines, as HTML's `datetime` takes it:
90
+ * "2026-10-14", "2026-10-14T08:12", "2026-10". With it, `time` renders in
91
+ * a `<time>`. Keep it the same moment as `time`, since some readers speak it.
92
+ */
93
+ dateTime?: string;
94
+ /**
95
+ * A picture in the marker. A string is an `Icon` name, drawn from the icon
96
+ * library `ConfigProvider` sets, and anything else renders as it is.
97
+ * Without it, the marker is a dot. It's hidden from assistive tech, so
98
+ * what it means goes in the title.
99
+ */
100
+ icon?: React.ReactNode;
101
+ /** This item's marker color, over the root's. Say what it means in the words too. */
102
+ color?: TimelineColor;
103
+ /** Anything else about the event, under the title and the time, as written. */
104
+ children?: React.ReactNode;
105
+ /** Text color helper. */
106
+ textColor?: (typeof validColors)[number] | 'inherit' | 'current';
107
+ /** Background color helper. */
108
+ bgColor?: (typeof validColors)[number] | 'inherit' | 'current';
109
+ }
110
+ /**
111
+ * One event: a marker on the rail, then its title, its time and anything else about it.
112
+ *
113
+ * Outside a `Timeline` it's a record item with an `h2` title, though the
114
+ * styles are registered on `.timeline`, so the rail and the marker need one.
115
+ *
116
+ * @function
117
+ * @param {TimelineItemProps} props - Props for Timeline.Item.
118
+ * @param {React.Ref<HTMLLIElement>} ref - Forwarded ref to the `<li>`.
119
+ * @returns {JSX.Element} The rendered event.
120
+ *
121
+ * @example
122
+ * <Timeline.Item title="Shipped" time="14 October 2026" dateTime="2026-10-14">
123
+ * Left the warehouse in Leeds.
124
+ * </Timeline.Item>
125
+ */
126
+ export declare const TimelineItem: React.ForwardRefExoticComponent<TimelineItemProps & React.RefAttributes<HTMLLIElement>>;
127
+ export declare const Timeline: React.ForwardRefExoticComponent<TimelineProps & React.RefAttributes<HTMLOListElement>> & {
128
+ Item: React.ForwardRefExoticComponent<TimelineItemProps & React.RefAttributes<HTMLLIElement>>;
129
+ };
130
+ export default Timeline;
@@ -29,7 +29,12 @@ interface IconBaseProps extends React.HTMLAttributes<HTMLSpanElement>, BulmaClas
29
29
  className?: string;
30
30
  /** Text color helper. */
31
31
  textColor?: (typeof validColors)[number] | 'inherit' | 'current';
32
- /** Bulma color modifier for the icon. */
32
+ /**
33
+ * Text color alias: renders `has-text-<color>`, exactly like `textColor`.
34
+ * Not a filled variant (no `.icon.is-<color>` CSS exists). Prefer
35
+ * `textColor`, which takes precedence when both are set; use `bgColor` for
36
+ * a colored surface.
37
+ */
33
38
  color?: 'primary' | 'link' | 'info' | 'success' | 'warning' | 'danger';
34
39
  /** Background color helper. */
35
40
  bgColor?: (typeof validColors)[number] | 'inherit' | 'current';
@@ -26,7 +26,7 @@ type IconLibrary = 'fa' | 'mdi' | 'ion' | 'material-icons' | 'material-symbols';
26
26
  * @extraProp {React.Ref<HTMLInputElement>} [ref] - Ref forwarded to the input element.
27
27
  */
28
28
  export interface TaginputProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange' | 'defaultValue'>, Omit<BulmaClassesProps, 'color'>, FormFieldProps {
29
- /** Field label. Automatically associated with the text input via `htmlFor` — uses your `id` when provided, otherwise a generated one. Not wired when the tag limit is reached (the input is not rendered). Dropped inside an outer `Field`, whose own label associates instead when that `Field` generates a target id (not `grouped`/`hasAddons`, no explicit `labelProps.htmlFor`) and you set no `id` here; it then replaces the `aria-label="Add tag"` fallback too. With `data`, the label naming the input also names the open suggestion list, through `aria-labelledby`, when it has an id: this label always does, and an outer `Field`'s does unless you wired it by hand without an `id` in its `labelProps`. Otherwise the list is named "Suggestions". */
29
+ /** Field label. Automatically associated with the text input via `htmlFor` — uses your `id` when provided, otherwise a generated one. Dropped inside an outer `Field`, whose own label associates instead when that `Field` generates a target id (not `grouped`/`hasAddons`, no explicit `labelProps.htmlFor`) and you set no `id` here; it then replaces the `aria-label="Add tag"` fallback too. With `data`, the label naming the input also names the open suggestion list, through `aria-labelledby`, when it has an id: this label always does, and an outer `Field`'s does unless you wired it by hand without an `id` in its `labelProps`. Otherwise the list is named "Suggestions". */
30
30
  label?: React.ReactNode;
31
31
  /** Props for the label element. An explicit `htmlFor` here overrides the automatic association (no id is generated then). With `data`, while the label names the input, the suggestion list's `aria-labelledby` points at it, through an `id` here when you give one and a generated one otherwise. */
32
32
  labelProps?: React.LabelHTMLAttributes<HTMLLabelElement> & {
@@ -64,9 +64,11 @@ export interface TaginputProps extends Omit<React.HTMLAttributes<HTMLDivElement>
64
64
  /** Attach tags visually. */
65
65
  attached?: boolean;
66
66
  /**
67
- * Maximum number of tags allowed. At the limit the text input isn't
68
- * rendered, and neither is the suggestion list, so the field takes no more
69
- * tags until one is removed.
67
+ * Maximum number of tags allowed. At the limit the text input stays but
68
+ * turns read-only, so focus stays put and the label still names it. It
69
+ * takes no more tags and the suggestion list stays closed. Backspace (with
70
+ * `removeOnKeys`) or a tag's remove button makes room again. While the
71
+ * counter shows, it describes the input.
70
72
  */
71
73
  maxTags?: number;
72
74
  /** Maximum length of input. */
@@ -81,7 +83,12 @@ export interface TaginputProps extends Omit<React.HTMLAttributes<HTMLDivElement>
81
83
  ellipsis?: boolean;
82
84
  /** Shows a counter of the number of tags. */
83
85
  hasCounter?: boolean;
84
- /** Characters that split pasted text into tags. */
86
+ /**
87
+ * Characters that split pasted text into tags. Each part goes through the
88
+ * same checks as a typed tag, against the tags before it, the paste's own
89
+ * included, and adding stops at `maxTags`. `onChange` fires once for the
90
+ * whole paste, and `onAdd` once for each tag it adds.
91
+ */
85
92
  onPasteSeparators?: string[];
86
93
  /** Validation function called before adding a tag. */
87
94
  beforeAdding?: (tag: string) => boolean;
@@ -23,6 +23,7 @@ export * from './components/Popover.js';
23
23
  export * from './components/HoverCard.js';
24
24
  export * from './components/ContextMenu.js';
25
25
  export * from './components/Steps.js';
26
+ export * from './components/Timeline.js';
26
27
  export * from './components/Sidebar.js';
27
28
  export * from './components/Toast.js';
28
29
  export * from './components/Dialog.js';
@@ -0,0 +1,130 @@
1
+ import React from 'react';
2
+ import { BulmaClassesProps, validColors } from '../helpers/useBulmaClasses.js';
3
+ declare const validTimelineColors: readonly ["primary", "link", "info", "success", "warning", "danger"];
4
+ /** The Bulma colors a marker takes. */
5
+ export type TimelineColor = (typeof validTimelineColors)[number];
6
+ declare const validTimelineTitleElements: readonly ["h2", "h3", "h4", "h5", "h6", "p"];
7
+ /** What each item's title renders as: a heading level, or `p` for a plain line. */
8
+ export type TimelineTitleElement = (typeof validTimelineTitleElements)[number];
9
+ /** Where the rail goes. */
10
+ export type TimelineAlign = 'start' | 'end' | 'alternate';
11
+ /**
12
+ * Props for the Timeline component. The helper props, the other attributes
13
+ * and the `ref` land on the `<ol>`.
14
+ *
15
+ * @extraProp {React.Ref<HTMLOListElement>} [ref] - Ref forwarded to the `<ol>`.
16
+ */
17
+ export interface TimelineProps extends Omit<React.OlHTMLAttributes<HTMLOListElement>, 'color' | 'role'>, Omit<BulmaClassesProps, 'color' | 'backgroundColor'> {
18
+ /** Additional CSS classes to apply. */
19
+ className?: string;
20
+ /**
21
+ * `Timeline.Item`s, in the order they're read: newest first or oldest
22
+ * first for a record, oldest first with `active` or `pending`.
23
+ */
24
+ children?: React.ReactNode;
25
+ /**
26
+ * Marks progress. The item at this index, counting the children from 0, is
27
+ * current; the ones before it are completed and the ones after it are
28
+ * upcoming. Leave it out for a record, where nothing is marked. `-1` marks
29
+ * every item upcoming, and an index past the last marks them all completed.
30
+ * A fraction counts as the item it has reached, so `2.5` marks the third
31
+ * item current. Each child counts as one item, with Fragments and arrays opened up, so
32
+ * render one item per child. A component of your own around a
33
+ * `Timeline.Item` still gets its state, but one that renders nothing still
34
+ * counts.
35
+ */
36
+ active?: number;
37
+ /**
38
+ * What's under way, as a last item after the children: its title, read
39
+ * with `pendingLabel`. Write it as words that say so ("Out for delivery").
40
+ */
41
+ pending?: React.ReactNode;
42
+ /**
43
+ * `start`: the rail at the start of the line. `end`: at the end, with the
44
+ * text against it. `alternate`: down the middle, the items taking turns and
45
+ * each time across the rail; below Bulma's tablet breakpoint it's `start`.
46
+ */
47
+ align?: TimelineAlign;
48
+ /**
49
+ * What every item's title renders as: a heading at the level under the
50
+ * heading the timeline sits beneath, or `p` for a busy feed.
51
+ */
52
+ titleAs?: TimelineTitleElement;
53
+ /**
54
+ * The markers' color, and the color of progress with `active`. Neutral
55
+ * without it, and Bulma's `link` for progress. The markers are hidden from
56
+ * assistive tech, so say what a color means in the words too.
57
+ */
58
+ color?: TimelineColor;
59
+ /** Read after a completed item's title, visually hidden. In your app's language. */
60
+ completedLabel?: string;
61
+ /** Read after an upcoming item's title, visually hidden. In your app's language. */
62
+ upcomingLabel?: string;
63
+ /** Read after the pending item's title, visually hidden. In your app's language. */
64
+ pendingLabel?: string;
65
+ /** Text color helper. */
66
+ textColor?: (typeof validColors)[number] | 'inherit' | 'current';
67
+ /** Background color helper. */
68
+ bgColor?: (typeof validColors)[number] | 'inherit' | 'current';
69
+ }
70
+ /**
71
+ * Props for Timeline.Item, one event. The helper props, the other attributes
72
+ * and the `ref` land on its `<li>`. The native `title` attribute isn't one of
73
+ * them, since `title` here is the event's title.
74
+ *
75
+ * @extraProp {React.Ref<HTMLLIElement>} [ref] - Ref forwarded to the `<li>`.
76
+ */
77
+ export interface TimelineItemProps extends Omit<React.LiHTMLAttributes<HTMLLIElement>, 'color' | 'title'>, Omit<BulmaClassesProps, 'color' | 'backgroundColor'> {
78
+ /** Additional CSS classes to apply. */
79
+ className?: string;
80
+ /** What happened, in a line. It renders as the root's `titleAs`. */
81
+ title?: React.ReactNode;
82
+ /**
83
+ * When it happened, as the reader sees it: "14 October 2026", "2 hours
84
+ * ago". Put the whole date in the words, since screen readers mostly read
85
+ * the text.
86
+ */
87
+ time?: React.ReactNode;
88
+ /**
89
+ * The same moment for machines, as HTML's `datetime` takes it:
90
+ * "2026-10-14", "2026-10-14T08:12", "2026-10". With it, `time` renders in
91
+ * a `<time>`. Keep it the same moment as `time`, since some readers speak it.
92
+ */
93
+ dateTime?: string;
94
+ /**
95
+ * A picture in the marker. A string is an `Icon` name, drawn from the icon
96
+ * library `ConfigProvider` sets, and anything else renders as it is.
97
+ * Without it, the marker is a dot. It's hidden from assistive tech, so
98
+ * what it means goes in the title.
99
+ */
100
+ icon?: React.ReactNode;
101
+ /** This item's marker color, over the root's. Say what it means in the words too. */
102
+ color?: TimelineColor;
103
+ /** Anything else about the event, under the title and the time, as written. */
104
+ children?: React.ReactNode;
105
+ /** Text color helper. */
106
+ textColor?: (typeof validColors)[number] | 'inherit' | 'current';
107
+ /** Background color helper. */
108
+ bgColor?: (typeof validColors)[number] | 'inherit' | 'current';
109
+ }
110
+ /**
111
+ * One event: a marker on the rail, then its title, its time and anything else about it.
112
+ *
113
+ * Outside a `Timeline` it's a record item with an `h2` title, though the
114
+ * styles are registered on `.timeline`, so the rail and the marker need one.
115
+ *
116
+ * @function
117
+ * @param {TimelineItemProps} props - Props for Timeline.Item.
118
+ * @param {React.Ref<HTMLLIElement>} ref - Forwarded ref to the `<li>`.
119
+ * @returns {JSX.Element} The rendered event.
120
+ *
121
+ * @example
122
+ * <Timeline.Item title="Shipped" time="14 October 2026" dateTime="2026-10-14">
123
+ * Left the warehouse in Leeds.
124
+ * </Timeline.Item>
125
+ */
126
+ export declare const TimelineItem: React.ForwardRefExoticComponent<TimelineItemProps & React.RefAttributes<HTMLLIElement>>;
127
+ export declare const Timeline: React.ForwardRefExoticComponent<TimelineProps & React.RefAttributes<HTMLOListElement>> & {
128
+ Item: React.ForwardRefExoticComponent<TimelineItemProps & React.RefAttributes<HTMLLIElement>>;
129
+ };
130
+ export default Timeline;
@@ -29,7 +29,12 @@ interface IconBaseProps extends React.HTMLAttributes<HTMLSpanElement>, BulmaClas
29
29
  className?: string;
30
30
  /** Text color helper. */
31
31
  textColor?: (typeof validColors)[number] | 'inherit' | 'current';
32
- /** Bulma color modifier for the icon. */
32
+ /**
33
+ * Text color alias: renders `has-text-<color>`, exactly like `textColor`.
34
+ * Not a filled variant (no `.icon.is-<color>` CSS exists). Prefer
35
+ * `textColor`, which takes precedence when both are set; use `bgColor` for
36
+ * a colored surface.
37
+ */
33
38
  color?: 'primary' | 'link' | 'info' | 'success' | 'warning' | 'danger';
34
39
  /** Background color helper. */
35
40
  bgColor?: (typeof validColors)[number] | 'inherit' | 'current';
@@ -26,7 +26,7 @@ type IconLibrary = 'fa' | 'mdi' | 'ion' | 'material-icons' | 'material-symbols';
26
26
  * @extraProp {React.Ref<HTMLInputElement>} [ref] - Ref forwarded to the input element.
27
27
  */
28
28
  export interface TaginputProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange' | 'defaultValue'>, Omit<BulmaClassesProps, 'color'>, FormFieldProps {
29
- /** Field label. Automatically associated with the text input via `htmlFor` — uses your `id` when provided, otherwise a generated one. Not wired when the tag limit is reached (the input is not rendered). Dropped inside an outer `Field`, whose own label associates instead when that `Field` generates a target id (not `grouped`/`hasAddons`, no explicit `labelProps.htmlFor`) and you set no `id` here; it then replaces the `aria-label="Add tag"` fallback too. With `data`, the label naming the input also names the open suggestion list, through `aria-labelledby`, when it has an id: this label always does, and an outer `Field`'s does unless you wired it by hand without an `id` in its `labelProps`. Otherwise the list is named "Suggestions". */
29
+ /** Field label. Automatically associated with the text input via `htmlFor` — uses your `id` when provided, otherwise a generated one. Dropped inside an outer `Field`, whose own label associates instead when that `Field` generates a target id (not `grouped`/`hasAddons`, no explicit `labelProps.htmlFor`) and you set no `id` here; it then replaces the `aria-label="Add tag"` fallback too. With `data`, the label naming the input also names the open suggestion list, through `aria-labelledby`, when it has an id: this label always does, and an outer `Field`'s does unless you wired it by hand without an `id` in its `labelProps`. Otherwise the list is named "Suggestions". */
30
30
  label?: React.ReactNode;
31
31
  /** Props for the label element. An explicit `htmlFor` here overrides the automatic association (no id is generated then). With `data`, while the label names the input, the suggestion list's `aria-labelledby` points at it, through an `id` here when you give one and a generated one otherwise. */
32
32
  labelProps?: React.LabelHTMLAttributes<HTMLLabelElement> & {
@@ -64,9 +64,11 @@ export interface TaginputProps extends Omit<React.HTMLAttributes<HTMLDivElement>
64
64
  /** Attach tags visually. */
65
65
  attached?: boolean;
66
66
  /**
67
- * Maximum number of tags allowed. At the limit the text input isn't
68
- * rendered, and neither is the suggestion list, so the field takes no more
69
- * tags until one is removed.
67
+ * Maximum number of tags allowed. At the limit the text input stays but
68
+ * turns read-only, so focus stays put and the label still names it. It
69
+ * takes no more tags and the suggestion list stays closed. Backspace (with
70
+ * `removeOnKeys`) or a tag's remove button makes room again. While the
71
+ * counter shows, it describes the input.
70
72
  */
71
73
  maxTags?: number;
72
74
  /** Maximum length of input. */
@@ -81,7 +83,12 @@ export interface TaginputProps extends Omit<React.HTMLAttributes<HTMLDivElement>
81
83
  ellipsis?: boolean;
82
84
  /** Shows a counter of the number of tags. */
83
85
  hasCounter?: boolean;
84
- /** Characters that split pasted text into tags. */
86
+ /**
87
+ * Characters that split pasted text into tags. Each part goes through the
88
+ * same checks as a typed tag, against the tags before it, the paste's own
89
+ * included, and adding stops at `maxTags`. `onChange` fires once for the
90
+ * whole paste, and `onAdd` once for each tag it adds.
91
+ */
85
92
  onPasteSeparators?: string[];
86
93
  /** Validation function called before adding a tag. */
87
94
  beforeAdding?: (tag: string) => boolean;
@@ -23,6 +23,7 @@ export * from './components/Popover.js';
23
23
  export * from './components/HoverCard.js';
24
24
  export * from './components/ContextMenu.js';
25
25
  export * from './components/Steps.js';
26
+ export * from './components/Timeline.js';
26
27
  export * from './components/Sidebar.js';
27
28
  export * from './components/Toast.js';
28
29
  export * from './components/Dialog.js';